Java进程占用CPU100%

问题描述

玩家反馈卡顿,运维查看进程占用发现程序CPU占用飙高,100%

解决步骤

第一步:top指令查看系统中各个进程CPU占用情况

[root@slave1 ~]# top
top - 01:06:38 up 99 days, 22:15,  2 users,  load average: 2.17, 1.16, 0.61
Tasks: 300 total,   1 running, 299 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.6 us,  0.5 sy,  0.0 ni, 98.8 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32778440 total,  3785504 free,  4891728 used, 24101208 buff/cache
KiB Swap:  5242876 total,  5140732 free,   102144 used. 27369340 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                                                                                                                
17619 root      20   0   11.7g   1.0g  18412 S  13.0  3.1   3:29.45 java                                                                                                                                                                                                                                                                   
30563 root      20   0  123076   2764   1496 S   1.3  0.0  17:37.94 htop                                                                                                                                                                                                                                                                   
  950 root      20   0  340792   4960   3736 S   0.3  0.0 126:18.20 vmtoolsd                                                                                                                                                                                                                                                               
 7023 root      20   0       0      0      0 S   0.3  0.0   0:00.19 kworker/5:2                                                                                                                                                                                                                                                            
23454 polkitd   20   0 3135868   1.0g  12292 S   0.3  3.2 991:46.29 mysqld                                                                                                                                                                                                                                                                 
    1 root      20   0  193852   6512   4224 S   0.0  0.0   1:06.11 systemd                                                                                                                                                                                                                                                                

第二步:找到占用CPU高的进程号,这里以17619为例。使用top -Hp [pid]查看对应进程中是哪些线程占用比例过高

[root@slave1 ~]# top -Hp 17619
top - 01:08:40 up 99 days, 22:17,  2 users,  load average: 0.42, 0.82, 0.55
Threads: 153 total,   0 running, 153 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.6 us,  1.2 sy,  0.0 ni, 97.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32778440 total,  3766400 free,  4910108 used, 24101932 buff/cache
KiB Swap:  5242876 total,  5140732 free,   102144 used. 27350964 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                                                                                                                 
19156 root      20   0   11.8g   1.0g  18428 S  6.2  3.2   0:00.19 场景定时事                                                                                                                                                                                                                                                          
19186 root      20   0   11.8g   1.0g  18428 S  6.2  3.2   0:00.44 场景公共驱                                                                                                                                                                                                                                                          
19198 root      20   0   11.8g   1.0g  18428 S  6.2  3.2   0:00.44 场景公共驱                                                                                                                                                                                                                                                          
19210 root      20   0   11.8g   1.0g  18428 S  6.2  3.2   0:00.43 场景公共驱                                                                                                                                                                                                                                                          
17619 root      20   0   11.8g   1.0g  18428 S  0.0  3.2   0:00.00 java                                                                                                                                                                                                                                                                    
17625 root      20   0   11.8g   1.0g  18428 S  0.0  3.2   0:15.55 java                                                                                                                                                                                                                                                                    
17626 root      20   0   11.8g   1.0g  18428 S  0.0  3.2   0:02.86 java                                                                                                                                                                                                                                                                    
17627 root      20   0   11.8g   1.0g  18428 S  0.0  3.2   0:02.87 java                                                                                                                                                                                                                                                                    

第三步:找到占用过高的线程以后,需要将对应的线程号,转换为十六进制数

[root@slave1 ~]# printf “%x\n” 19156
“4ad4n”

第四步:jstack登场

jstack 17619  | grep 0x4ad4n -A100

因为此处我这里的线程查询的时候没有占用资源,所以不显示!有问题的线程这里肯定会指出对应的问题代码,是哪个方法一直在占用的!

可能出现的问题

1、指令输入错误

Error attaching to core file: cannot open binary file
sun.jvm.hotspot.debugger.DebuggerException: cannot open binary file
	at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach0(Native Method)
	at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach(LinuxDebuggerLocal.java:286)
	at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:673)
	at sun.jvm.hotspot.HotSpotAgent.setupDebuggerLinux(HotSpotAgent.java:611)
	at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:337)
	at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:304)
	at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:156)
	at sun.jvm.hotspot.tools.Tool.start(Tool.java:191)
	at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
	at sun.jvm.hotspot.tools.JStack.main(JStack.java:92)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.tools.jstack.JStack.runJStackTool(JStack.java:140)
	at sun.tools.jstack.JStack.main(JStack.java:106)

碰见这样的问题,肯定是输入的指令有问题了,一定要检查自己的指令输入!

2、系统参数设置问题

[root@slave1 ~]# sysctl -n kernel.yama.ptrace_scope
1

其中1表示未打开,0表示打开,我们需要将其设置为0

[root@slave1 ~]# sysctl -w kernel.yama.ptrace_scope=0
kernel.yama.ptrace_scope = 0

总结

遇到问题不要慌,chatGPT都出来了!哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:前几天线上服务器某个Tomcat进程突然间歇性CPU占用100%,这个并不是突然性的,而是有规律的,Top了一下基本每隔30s飙升一次,坐等5s左右回落。虽然这酱紫,由于是多核CPU,外加其实并没有多少真实用户在访问,也并不影响什么。\[1\] 问题:windows tomcat cpu 100% 回答: 如果在Windows上运行的Tomcat进程出现CPU占用100%的问题,可以尝试以下步骤进行排查和解决。首先,可以通过任务管理器查看Tomcat进程的详细信息,包括PID(进程ID)。然后,可以使用jstack命令保存Tomcat进程的线程现场信息,例如jstack <PID> > <文件路径>。接下来,可以使用文本编辑器打开保存的文件,搜索高CPU占用的线程ID(通常以16进制表示)。最后,根据搜索到的线程ID,可以进一步分析和解决CPU占用率高的问题。\[2\] #### 引用[.reference_title] - *1* [记一次懵比的Tomcat进程CPU使用率100%](https://blog.csdn.net/weixin_28759725/article/details/119228133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [线上Java项目cpu突然100%或Tomcat的cpu占用100%](https://blog.csdn.net/Blueeyedboy521/article/details/124145088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值