EAS Cloud应用服务器为linux,jdk类型为Oracle jdk 实例OOM导致CPU过高的处理办法

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

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过高的处理办法

步骤一:查看java进程占用cpu的高低情况root用户下执行top命令截图 (按q可以退出top)下图是java进程占用cpu比较高的情况(428.5),一...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息