Linux下java服务cpu占用过高如何处理

在Linux系统中,当发现Java服务CPU使用率过高时,可以使用`top`命令找到占用最高的进程,接着用`jps`确认Java服务。通过`top-H-p[pid]`查找异常线程,将其转换为16进制后,使用`jstack`结合16进制线程PID来定位异常代码,例如在Minecraft服务中定位到`BlockFire`和`WorldServer`的相关问题。
摘要由CSDN通过智能技术生成

Linux下java服务cpu占用过高如何处理

  1. top命令查看进程信息

    top
    

    image-20230224140824219

  2. 按下shift+p,按cpu使用率排行,可见进程1932占用最高,并且是一个java服务

    image-20230224141028388

  3. 使用jps命令确认java服务

    [root@VM-16-16-centos ~]# jps
    1011 Jps
    9462 yuan_back-0.0.1-SNAPSHOT.jar
    1932 spigot-1.18.jar
    
  4. 查找异常进程中的异常线程

    top -H -p [pid]
    

    image-20230224141410194

  5. 将异常线程的pid转为16进制

    printf "%x\n" pid
    
    [root@VM-16-16-centos ~]# printf "%x\n" 2035
    7f3
    
  6. 使用jstack定位异常线程代码

    jstack [进程pid] | grep -A 10 [16进制线程pid]
    
    [root@VM-16-16-centos ~]# jstack 1932 | grep -A 10 7f3
    "Server thread" #22 prio=5 os_prio=0 cpu=690162281.71ms elapsed=4553857.35s tid=0x00007ff5ee745ac0 nid=0x7f3 runnable  [0x00007ff6019b9000]
       java.lang.Thread.State: RUNNABLE
            at net.minecraft.world.level.block.BlockFire.a(BlockFire.java:227)
            at net.minecraft.world.level.block.state.BlockBase$BlockData.a(BlockBase.java:911)
            at net.minecraft.server.level.WorldServer.d(WorldServer.java:776)
            at net.minecraft.server.level.WorldServer$$Lambda$4882/0x0000000801800678.accept(Unknown Source)
            at net.minecraft.world.ticks.TickListServer.a(SourceFile:215)
            at net.minecraft.world.ticks.TickListServer.a(SourceFile:98)
            at net.minecraft.server.level.WorldServer.a(WorldServer.java:341)
            at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1300)
            at net.minecraft.server.dedicated.DedicatedServer.b(DedicatedServer.java:428)
    

    这样就定位到异常代码,并可以进行具体分析了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acerola-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值