服务端代码可能出现各种各样的问题,有不同的方式可以进行调试,比如看日志、使用远程调试工具(例如jprofiler),自带的命令工具。
例如Java服务,使用JDK自带命令:
怀疑服务的线程阻塞了,可以查看线程状态,看看因为哪里导致。
1、先查看java进程,找到你关心的服务
jps -lm
2、打印进程状态
jstack 27092|grep java.lang.Thread.State| awk '{print $2$3$4$5}' | sort | uniq -c
运行结果:
8 RUNNABLE
1 TIMED_WAITING(sleeping)
4 WAITING(onobjectmonitor)
150 WAITING(parking)
也可以直接使用jstack 27092 > log 去分析代码。
3、查看JVM内存的使用情况
jmap -heap 27092
4、也可以查看服务中存活的对象
jmap -dump:live,format=b,file=dump.hprof 27092
生成dump文件后可以利用自带的web服务加载,在浏览器中查看
jhat -J-Xmx512m dump.hprof