JVM性能调优记录
今天处理了一次性能问题,记录一下处理的过程。 早上发现几台机器负载非常高,前端nginx的连接数接近2000。 后端的应用服务器的响应情况很忙,最糟糕的情况达到了30多万毫秒。 top看到进程运行情况: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3182 root 25 0 1028m 560m 9296 S 289.6 29.6 27:22.26 java 3220 root 25 0 1039m 678m 9308 S 108.3 35.8 27:17.61 java 1 root 15 0 2084 608 524 S 0.0 0.0 0:55.82 init 确定了是应用服务器程序占用了大部分cpu 接着运行top -H -p 3182 看到占用最高的cpu的java进程号。 jstack 显示该jvm进程中所有线程的调用栈已经线程所处的状态(jdk5.0以上支持)。 jstack pid | less 查找上述进程号的十六进制数字,比如nid=0x1613d(小写) 找出对应的进程 java.lang.Thread.State: RUNNABLE at net.sf.json.util.JSONTokener.nextClean(JSONTokener.java:207) at net.sf.json