java项目性能监控手段及问题定位

工作中项目上线前经常要进行压力测试,以下记录常用的调优问题定位手段:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值