草庐IT

Jstack排查线上CPU100%

aibianchengya 2023-04-18 原文

Jstack排查线上CPU100%

介绍

jstack是JVM自带的Java堆栈跟踪工具,用于生成java虚拟机当前时刻的线程快照,来帮助定位线程出现长时间停顿的原因,例如死锁、死循环等。

语法

jstack [options] pid

options:

  1. -F:to force a thread dump. Use when jstack does not respond (process is hung),当一个进程挂起时,jstack 命令没有响应时,强制输出这个线程转储信息。
  2. -m:to print both java and native frames (mixed mode),打印JAVA和包含本地方法的C/C++的堆栈信息。
  3. -l:long listing. Prints additional information about locks,打印堆栈信息,包含锁的其他信息,例如死锁等。

实操

  1. 找出cpu使用率最高的进程

    top -c
    
  2. 找出CPU使用率最高的进程,查询该pid进程下的线程使用情况

    ps -mp 进程id -o THREAD,tid,time
    
  3. 将线程id转换成16进制

    printf "%x\n" tid
    
  4. jstack查看相应线程的堆栈

    jstack 进程id | grep 16进制线程id -A 30
    # 或者打印到文件
    jstack pid | grep tid >> jstack.txt
    

扩展

JVM线程的几种状态

New

新建的线程,线程还没启动。

Runnable

线程正在运行或者等待操作系统中的其他资源,例如线程运行过程中,系统分配资源给其他操作,此时这个线程还是Runnable状态,可以理解为可运行的线程。

Blocked

阻塞状态,阻塞状态的线程正在等待监视器锁,在Dump日志中一般显示为java.lang.Thread.State: BLOCKED

Waiting

等待线程,线程正在无限期的等待另一个线程执行某些特别操作。一般线程由于调用一下方法会处于等待状态。

Object.wait // 不带超时
Thread.join // 不带超时
LockSupport.park
Time_Waiting

和Waiting类似,但是线程等待有时间限制,设定了指定等待时间。一般线程由于调用一下方法会处于超时等待状态。

Thread.sleep
Object.wait // 指定超时时间
Thread.join // 指定超时时间
LockSupport.parkNanos
LockSupport.parkUntil
Terminated

终止状态。

原文链接:https://monkey.blog.xpyvip.top/archives/jstack-pai-cha-xian-shang-cpu

有关Jstack排查线上CPU100%的更多相关文章

  1. 电脑启动后显示器黑屏怎么办?排查下面4个问题,快速解决 - 2

    电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑

  2. ruby-on-rails - 负载测试期间 Unicorn CPU 使用率激增,优化方法 - 2

    我对为我的RubyonRails3.1.3应用优化我的Unicorn设置的方法很感兴趣。我目前正在高CPU超大实例上生成14个工作进程,因为我的应用程序在负载测试期间似乎受CPU限制。在模拟负载测试中,每秒大约20个请求重放请求,我的实例上的所有8个内核都达到峰值,盒子负载飙升至7-8个。每个unicorn实例使用大约56-60%的CPU。我很好奇可以通过哪些方式对其进行优化?我希望能够每秒将更多请求汇集到这种大小的实例上。内存和所有其他I/O一样完全正常。在我的测试过程中,CPU越来越低。 最佳答案 如果您受CPU限制,您希望使用

  3. 基于SpringBoot的线上日志阅读器 - 2

    软件特点部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式,支持大文件的读取。支持实时打印新增的日志(类终端)。支持日志搜索。使用手册基本页面配置路径配置日志所在的目录,配置后按回车键生效,下拉框选择日志名称。选择日志后点击生效,即可加载日志。windows路径E:\java\project\log-view\logslinux路径/usr/local/XX历史模式历史模式下,不会读取新增的日志。针对历史文件可以分页读取,配置分页大小、跳转。历史模式下,支持根据关键词搜索。目前搜索引擎使用的是jdk自带类库,搜索速度相对较低,优点是比较简单。2G日志全文搜

  4. ruby - Ruby 进程如何限制其 CPU 使用率? - 2

    假设我希望Ruby进程使用的CPU不超过15%。是否可以?怎么办? 最佳答案 您可以尝试使用Process.setrlimit来自标准核心:Setstheresourcelimitoftheprocess.这看起来只是setrlimit的包装器来自C库,因此它可能仅在Unix-ish平台上可用。setrlimit不支持CPU百分比限制,但它支持以秒为单位限制CPU时间。如果您只是想让您的Ruby进程不占用整个CPU,那么您可以尝试使用Process.setpriority来调整它的优先级。这只是libc的setpriority的包装

  5. ruby - Unicorn Rails - 在生产模式下启动时占用 100% CPU - 2

    我们正在使用Unicorn_Rails+nginx。它在我的系统(4GBRam,Intel(R)Core(TM)2DuoCPUP8600@2.40GHz)的开发模式和生产模式下运行良好我能够在本地系统中启动10个worker,但在任何情况下都无法在生产中启动超过2个有时它可以工作,但需要等待15-20米启动unicorn_rails时一直占用99.6%的CPU英特尔(R)至强(R)CPUE5507@2.27GHz但它卡在亚马逊(m1.small实例)1.73GB内存我发现没有人在任何地方谈论使用unicorn_rails启动缓慢...... 最佳答案

  6. ruby-on-rails - Rails、Minitest 和 Guard - 为什么 rb-fsevent 占用了超过 100% 的 CPU? - 2

    我在我的Rails应用程序中运行守卫,测试套件(最小的)最近停止正常工作。如果幸运的话,它会运行所有测试一次,也许两次。在那之后,即使是一个小的测试文件被更改也需要很长时间才能响应,以至于使用gem变得徒劳无功。在测试运行时跟随top,我可以看到有一个ruby​​进程持续占用了超过100%的CPU。即使所有测试都已运行并且我没有对文件进行任何更改。ruby进程是:/Users/Bodacious/.rvm/gems/ruby-2.0.0-p247@MyApp/gems/rb-fsevent-0.9.3/bin/fsevent_watch--latency0.1/Users/Bodaio

  7. ruby - Sidekiq 可以利用多个 CPU 内核吗? - 2

    我是Sidekiq的新手,将它与AmazonEC2实例上的Ruby结合使用,以使用ImageMagick处理图像来完成一些工作。在运行它时,我意识到每个工作人员都在同一个核心上运行。我使用EC2c3.2xlarge机器,它们有8个内核。它显示CPU使用率为15%,但一个内核使用了100%,而其他内核使用了0%。Sidekiq可以为不同的worker使用不同的CPU内核吗?如果可以,这种低效率是由ImageMagic造成的吗?我怎样才能让它使用其他内核? 最佳答案 如果您想使用MRI使用多个内核,则需要启动多个Sidekiq进程;为您

  8. 【华为OD机试真题 java、python、c++】荒地电站建设【2022 Q4 100分】(100%通过+复盘思路) - 2

    代码请进行一定修改后使用,本代码保证100%通过率,本题目提供了java、python、c++三种代码。复盘思路在文章的最后题目描述祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益。输入描述第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长最低要求的发电量之后每行为

  9. ruby-on-rails - 了解为什么 ruby​​ 进程在 100% CPU 时阻塞的方法 - 2

    我们有一个大型Rails应用程序,几天后,我们的ruby​​进程似乎陷入循环并占用100%的CPU,直到乘客服务器死机并引发502错误。您知道找出原因的最佳方法吗?我已经尝试过NewRelic,但它只是性能方面的东西,而且我们的错误太多了,无法猜测问题出在哪里。(我们每天有很多请求和很多UTF-8BSON错误,因为我们使用的是UTF-8url)使用:Rails3.2.6和Ruby1.9.2p290乘客3.0.13MongoDB2.0.1和Mongoid2.4.11NginxFreeBSD8.2 最佳答案 找出ruby卡住位置的简便方

  10. 记录一次挖矿病毒kthreaddk和rcu_bj,导致CPU飙高处理 - 2

    htop命令存在kthreaddk和rcu_bj进程,cpu飙高 占用一般cpu或者70-80%1、检查定时任务查看是否有#crontab-l 检查root账号是否有异常定时任务有的话crontab-e修改定时任务保存并检查所有的用户有没有定时任务(注:我的是gitlabgit账户被入侵)异常进程直接删除crontab-ugit-l查看git账号是否有异常定时任务 如有恶意定时任务删除#ls-l/proc/pid  查看进程文件#crontab-r  清空定时任务2、删除相关植入的恶意文件文件中/usr/lib/sys恶意文件 直接清空文件数据脚本执行先杀进程再清空日志后回收内存基本可以清掉数

随机推荐