EAS Cloud应用服务器为windows,jdk类型为ibm jdk 实例对应的java程序导致CPU过高的处理办法
步骤一:查看java进程占用cpu的高低情况
任务管理器-->详细信息-->cpu排序
下图是java进程占用cpu比较高的情况(55),一般持续比较高的就需要分析处理
步骤二:判断jdk类型
1.任务管理器中-->详细信息-->选中占用cpu高的这个java进程-->右键-->打开文件所在的位置 可以进入jdk的bin文件夹
可以看到本例的jdk是ibm jdk,版本是1.7 (如果是oracle jdk的话,如下画红线的地方会是oracle字样)
一般这样就可以确定本例是ibm jdk,版本是1.7了,如果要100%确定的话,还可以按如下的步骤进行:
在jdk的bin文件夹下,输入cmd后按回车键, 再执行 .\java -version
注意:要在jdk的bin文件夹下,输入cmd后按回车键,此时cmd进入的才是jdk的bin文件夹
确认此时cmd是进入jdk的bin文件夹
执行.\java -version
下图是使用了ibm的jdk,64bit 1.7版本
本文主要介绍EAS Cloud应用服务器为windows,jdk类型为ibm jdk 实例对应的java程序导致CPU过高的处理办法
jdk类型为oracle jdk 实例对应的java程序导致CPU过高的处理办法请参考链接:
EAS Cloud应用服务器为windows,jdk类型为Oracle jdk 实例OOM导致CPU过高的处理办法
EAS Cloud应用服务器为windows,jdk类型为Oracle jdk 实例非OOM导致CPU过高的处理办法
步骤三:判断是OOM还是非OOM导致cpu高
由于ibm-jdk下的jvm日志需要用工具打开才能确定是OOM还是非OOM,并且windows环境下也无法打印实例的各个线程占用CPU的情况。故windows环境下非OOM导致实例宕机的话可能还需要更换成oracle jdk后待问题重新后再收集日志。所以可以先不管是OOM还是非OOM,直接进行步骤四收集日志,分析日志后再决定后续操作。
步骤四:日志收集
主要是收集对应实例的javacore日志和heapdump日志。
1.确认导致CPU持续高消耗的实例是哪一个,该实例的http端口号是多少
任务管理器-->详细信息-->cpu排序找到占用cpu高的那个java进程对应的进程号
下图中占用cpu高的java进程的pid进程号码是40064
在控制台--"应用服务器"页签上查看进程号对应哪个实例
由下图可知该40064的进程号码对应的实例是server1(有时候找不到对应的进程号码,需要刷新一下),其http端口号是6888(注意这里是http端口号,不是rpc端口号)
2.收集javacore日志和heapdump日志
在收集之前,可以在实例的bin文件夹下(eas\server\profiles\server#\bin\)检查是否有修改日期是最近的core开头的日志,如果有最近几天core开头的日志的话,则可能前几天也发生CPU持续高的情况,并且自动产生了日志,本次CPU持续高的原因很可能跟前几天的原因一致。可以将最新的那一个core上传到ftp服务器上。这个文件占用空间大,分析完成后可以将这个core日志删除。但如果要100%确认本次CPU持续高消耗的原因或没有最近的core日志。则需要进行后面的步骤手动收集日志。
下图画红框日志是修改日期为2023/11/1的core开头的日志
(1)收集javacore日志(javacore日志就是实例的线程堆栈)
在浏览器中输入如下地址后按回车键,然后输入账号密码就可以收集。
http://serverip:httpport/easportal/tools/dump.jsp?type=javadump
(serverip是应用服务器的ip地址,httpport是导致CPU持续高消耗的实例http端口号)
案例截图如下:
输入地址http://serverip:httpport/easportal/tools/dump.jsp?type=javadump
(在本例中,serverip即应用服务器的ip地址是172.21.51.65,导致CPU持续高消耗的实例http端口号是6888。故需要使用http://172.21.51.65:6888/easportal/tools/dump.jsp?type=javadump 进行收集)
输入账号密码
出现Finish dump java就证明收集成功了
生成的日志在对应实例的bin目录下,文件是javacore开头的日志。本例导致CPU持续高消耗的实例是server1。故在eas\server\profiles\server1\bin文件夹下,现场要根据实际情况而定。可以按"修改日期"排序找到产生的javacore文件。
这个文件比较小,可以云之家发送。
(2)收集heapdump日志
(收集这个日志花的时间会比较长,收集过程中可能导致实例宕机,建议跟现场沟通好后再操作。)
在浏览器中输入如下地址后按回车键,然后输入账号密码就可以收集。
http://serverip:port/easportal/tools/dump.jsp?type=heapdump
(serverip是应用服务器的ip地址,httpport是导致CPU持续高消耗的实例http端口号)
案例截图如下:
输入地址 http://serverip:port/easportal/tools/dump.jsp?type=heapdump
(在本例中,serverip即应用服务器的ip地址是172.21.51.65,导致CPU持续高消耗的实例http端口号是6888。故需要使用http://172.21.51.65:6888/easportal/tools/dump.jsp?type=heapdump 进行收集)
输入账号密码:
出现Finish dump heap就证明收集成功了
生成的日志在对应实例的bin目录下,文件是heapdump开头的日志。本例导致CPU持续高消耗的实例是server1。故在eas\server\profiles\server1\bin文件夹下,现场要根据实际情况而定。可以按"修改日期"排序找到产生的heapdump文件。(这个文件比较大,可以压缩下上传到ftp服务器上,分析完成后可以在本地删除该文件以释放磁盘空间)
最后云之家同步发送下eas\server\profiles\serverxxx\logs\jvm_gc* (导致CPU持续高消耗的那个实例下所有jvm开头的日志)
EAS Cloud应用服务器为windows,jdk类型为ibm jdk 实例对应的java程序导致CPU过高的处理办法
本文2024-09-22 20:27:05发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-113711.html