EAS Cloud应用服务器为linux,jdk类型为Oracle jdk 实例OOM导致CPU过高的处理办法
步骤一:查看java进程占用cpu的高低情况
root用户下执行top命令截图 (按q可以退出top)
下图是java进程占用cpu比较高的情况(428.5),一般超过300可能就是比较高了
步骤二:判断jdk类型
root用户下执行ps -ef | grep osgi | more
下图是oracle的jdk (如果是ibm的jdk的话,下图红框部分会是ibm-jdk的字样)
本文主要介绍jdk类型为Oracle jdk 实例OOM导致CPU过高的处理办法。
jdk类型为ibm jdk 实例对应的java程序导致CPU过高的处理办法请参考链接:
EAS Cloud应用服务器为linux,jdk类型为ibm jdk 实例对应的java程序导致CPU过高的处理办法
步骤三:判断是OOM还是非OOM导致cpu高
OOM:占用cpu高的java进程对应实例的最新的jvm日志末尾有大量连续的Full GC
非OOM: 占用cpu高的java进程对应实例的最新的jvm日志末尾没有大量连续的Full GC
判断过程如下:
1.top命令找到占用cpu高的那个java进程对应的进程号码
由top结果可知(按q可以退出top),占用cpu高的java进程的pid进程号码是12241
2.pwdx 进程号码 查看进程号对应哪个实例
pwdx 12241可知该进程对应的实例是server1
3.cd 进入对应实例的logs目录下
(本案例是server1,本案例程序是安装在/var/kingdee目录下的,现场要根据实例情况而定,不能生搬硬套)
cd /var/kingdee/eas/server/profiles/server1/logs
4.ls -al | grep jvm列出实例的logs目录下所有的jvm日志
ls -al | grep jvm
5.tail命令检查最新的jvm日志末尾是否有大量连续的Full GC
实例的logs目录下一般有很多jvm开头的日志,要检查最新的那一个,最新的那一个才是现在正在使用的,如果现场jvm只有一个的话那就查看那一个就可以。本案例中最新的jvm日志名是jvm_gc_2022-05-17_16-47-15.log
tail jvm_gc_2022-05-17_16-47-15.log
如果是大量连续的Full GC,证明是oom了,如果只是GC的话,就是非OOM
下图是OOM了
本文主要介绍实例OOM导致CPU过高的处理办法。
实例非OOM导致CPU过高的处理办法请参考链接:
EAS Cloud应用服务器为linux,jdk类型为Oracle jdk 实例非OOM导致CPU过高的处理办法
步骤四:OOM后日志收集
主要是收集heapdump日志和javacore日志
1.收集heapdump日志
该方法收集的前提是图形界面可以正常使用。
在收集之前可以检查下占用cpu高的这个实例的bin目录下(本案例占用cpu高的这个实例是server1,故要检查eas/server/profiles/server1/bin目录,现场要根据实例情况而定,不能生搬硬套)是否有修改日期为最近几天的以javaheapdump日志或heapdump日志或core日志开头的日志。如果有最近几天的话,直接将最新的那一个上传到ftp服务器上。这个文件占用空间大,分析完成后可以将这个heapdump日志删除。无需再手动收集heapdump日志,如果没有这类日志或者没有最近几天产生的话,则需要进行后面的步骤手动收集heapdump日志
(1)cd 进入oracle-jkd1.7/bin目录下,执行./jvisualvm调出图形界面
或 cd 进入oracle-jkd1.8/bin目录下,执行./jvisualvm调出图形界面
(本案例程序是安装在/var/kingdee目录下的,现场要根据实例情况而定,不能生搬硬套)
(说明:如果oracle-jkd1.8/bin目录下的jvisualvm工具无法打开图形界面,则使用oracle-jkd1.7/bin目录下的jvisualvm工具)
(2)双击“com.kingdee.eas.tools.launcher.Start(pid 12241)”这一行-->点"Monitor(监视)”页签-->点击"Heap Dump(堆Dump)"
(3)生成heapdump日志
生成这个日志需要一定的时间。完全生成后可以看到文件的路径及其名称(下图生成的路径在/tmp/visualvm.dat/localhost_12241目录下,文件名是heapdump-1621320672975.hprof),可以将这个文件压缩后上传到ftp服务器上。这个文件占用空间大,分析完成后可以将这个heapdump日志删除。
2.收集javacore日志
(1)ps -ef |grep osgi |more 查看jdk bin目录的路径
(2)cd 进入jdk的bin目录
(3)jstack 实际的进程号 > 实际的进程号.txt
案例如下图:
生成的txt文件就在jdk的bin目录下,本例是/var/kingdee/eas/oracle-jdk1.8/bin目录下
EAS Cloud应用服务器为linux,jdk类型为Oracle jdk 实例OOM导致CPU过高的处理办法
本文2024-09-22 20:26:51发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-113684.html