线上环境JVM问题排查常用指令

2018-07-28  本文已影响0人  穿着帆布鞋的小花猫

线上和测试环境的JVM一般运行在linux服务器上,没有界面,遇到问题时需要用指令工具进行排查。这方面的学问博大精深,而且实战重于理论,这篇文章仅仅当作日常问题排查的笔记,方便自己查阅,各方面的细节网上有很多文章进行过深入探讨。

1. Tomcat配置

排查问题时不一定只围绕程序日志、linux系统性能指令和JDK工具,有时候看看程序部署的tomcat配置文件,也许会有帮助。

把${TOMCAT_DIR}当作程序运行的tomcat在线上环境安装的根目录。那么下面有几个常用配置文件可以供排查问题参考:

(1)${TOMCAT_DIR}/bin/catalina.sh

这个文件涉及JVM(JAVA_OPTS)和tomcat(CATALINA_OPTS)的启动参数、端口号等。另外还可以设置tomcat所使用的jdk版本。

(2)${TOMCAT_DIR}/bin/setclasspath.sh

这个文件一般涉及tomcat所使用的jdk版本。

(3)${TOMCAT_DIR}/bin/setenv.sh

这个文件一般涉及JVM的启动参数。

(4)${TOMCAT_DIR}/conf/server.xml

tomcat的基本配置文件。排查时主要看端口号配置是否冲突、connector协议、java程序读取的位置等。

2. linux指令

linux指令在排查时主要用于查JVM的进程id(pid)和线程id(也是pid,linux没有线程概念,线程和进程在linux里面的id都用pid表示,线程id可以后续配合jstack或者jps查出)。此外还用于查看服务器本身CPU、内存等使用情况。

(1)查进程id

ps -ef|grep -v|grep XXX

或者

ps aux|grep XXX

(2)查看服务器内存使用情况

free -m

(3)查看服务各程序的CPU、内存等指标

top

3. JDK工具

jdk工具主要用于在获取JVM的进程id后,对JVM进行细粒度的分析,比如堆栈、堆内存、线程等情况。

(1)查看JVM的线程id

jps -lv pid:jps只能查当前用户启动的JVM线程

jstack -l pid

(2)查看JVM堆栈情况

jstack -l pid

(3)查看JVM的堆内存

jmap -heap/-histo pid:注意jmap要是用全路径,也就是服务器里java安装路径下bin/jmap。因为jmap的jdk版本最好要和分析对象的jdk一致,而服务器一般装了多个jdk版本,所以显示指定jmap的路径是个好习惯。

(4)查看gc情况:

jstat [-命令选项] [pid] [间隔时间/毫秒] [查询次数]

比如:

jstat -class/-compiler/-gc/-gccapacity/-gcnew/-gcnewcapacity/-gcold/-gcoldcapactiy/-gcutil pid

这个命令的组合有很多,可以具体参考其他文章。

上一篇下一篇

猜你喜欢

热点阅读