工作中项目上线前经常要进行压力测试,以下记录常用的调优问题定位手段:
1:通过jvm的jstack -l pid >jstack.txt来获取当前项目的代码执行状态,保存的内容中如果存在非常多的TIMED_WAITING,则可以根据这个看到阻塞的代码在哪里。
2:通过jmap -histo 3368可以查看当前各程序的内存占用情况;
3:通过jstat -gcutil 4693 1000 可以查看jvm的垃圾回收情况;
另外如果想通过jconsole查看jvm的运行情况,可以通过如下配置端口和ip地址实现:
<jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.port=9900</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=false</jvm-arg>
<jvm-arg>-Djava.rmi.server.hostname=192.168.1.112</jvm-arg>
tomcat的配置为:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl="false"
-Dcom.sun.management.jmxrem-Djava.rmi.server.hostname=192.168.1.112ote.authenticate="false"
-Djava.rmi.server.hostname=192.168.1.112
resin的部分优化配置如下:
<jvm-arg>-server</jvm-arg>
<jvm-arg>-Xms1024M</jvm-arg>
<jvm-arg>-Xmx1024M</jvm-arg>
<jvm-arg>-Xmn256M</jvm-arg>
<jvm-arg>-Xss256k</jvm-arg>
<jvm-arg>-XX:PermSize=256M</jvm-arg>
<jvm-arg>-XX:MaxPermSize=512M</jvm-arg>
<jvm-arg>-XX:SurvivorRatio=8</jvm-arg>
<jvm-arg>-XX:MaxTenuringThreshold=7</jvm-arg>
<jvm-arg>-XX:GCTimeRatio=19</jvm-arg>
<jvm-arg>-XX:+UseParNewGC</jvm-arg>
<jvm-arg>-XX:+UseConcMarkSweepGC</jvm-arg>
<jvm-arg>-XX:+CMSPermGenSweepingEnabled</jvm-arg>
<jvm-arg>-XX:+CMSClassUnloadingEnabled</jvm-arg>
<jvm-arg>-XX:+UseCMSCompactAtFullCollection</jvm-arg>
<jvm-arg>-XX:CMSFullGCsBeforeCompaction=2</jvm-arg>
<jvm-arg>-XX:-CMSParallelRemarkEnabled</jvm-arg>
<jvm-arg>-XX:+DisableExplicitGC</jvm-arg>
<jvm-arg>-XX:CMSInitiatingOccupancyFraction=70</jvm-arg>
<jvm-arg>-XX:SoftRefLRUPolicyMSPerMB=0</jvm-arg>
<jvm-arg>-XX:+PrintClassHistogram</jvm-arg>
<jvm-arg>-XX:+PrintGCDetails</jvm-arg>
<jvm-arg>-XX:+PrintGCTimeStamps</jvm-arg>
<jvm-arg>-XX:+PrintGCApplicationConcurrentTime</jvm-arg>
<jvm-arg>-XX:+PrintGCApplicationStoppedTime</jvm-arg>
<jvm-arg>-Xloggc:log/gc.log</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.port=9991</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=false</jvm-arg>
<jvm-arg>-Djava.rmi.server.hostname=192.168.1.112</jvm-arg>
<watchdog-port>11010</watchdog-port>
<memory-free-min>1M</memory-free-min>
<thread-max>1024</thread-max>
<socket-timeout>10s</socket-timeout>
<keepalive-max>128</keepalive-max>
<keepalive-timeout>15s</keepalive-timeout>
========================================
tomcat的部分优化配置如下:
<Connector port="9888" executor="tomcatThreadPool" maxHttpHeaderSize="8192" URIEncoding="UTF-8"
maxThreads="4096" minSpareThreads="50" maxSpareThreads="100"
enableLookups="false" redirectPort="8443" acceptCount="800"
connectionTimeout="20000" disableUploadTimeout="true"
keepAliveTimeout="20000" maxKeepAliveRequests="1"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/jpeg,application/json"/>
===========================================
nginx作为resin的前端代理时,为了实现nginx与后端resin保持keep-alive连接,进行如下配置:
worker_processes 8;
worker_rlimit_nofile 404800;
error_log logs/error.log crit;
pid nginx.pid;
events {
use epoll;
worker_connections 102400;
#maxclients=65535*2;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request_method $scheme://$host$request_uri $server_protocol" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
# access_log logs/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml application/json;
gzip_vary on;
access_log /dev/null;
upstream test{
server 192.168.1.112:9700 max_fails=3 fail_timeout=30s;
server 192.168.1.112:9701 max_fails=3 fail_timeout=30s;
keepalive 16;
}
server {
listen 9800;
location / {
proxy_pass http://test;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:9801;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}
}
详见:
http://zhangxugg-163-com.iteye.com/blog/1551269
15万+

被折叠的 条评论
为什么被折叠?



