当前位置: 首页 > news >正文

个人怎么做课程网站深圳电器公司邮编

个人怎么做课程网站,深圳电器公司邮编,wordpress jekyll 选择,营销型网站服务CPU 使用率在系统监控中是一个非常重要的指标。对于大多数 Web 应用来说,它们往往是 IO 密集型的,因此只会在某些时刻可能会出现 CPU 突然飙升的情况,随后很快就恢复正常。然而,当收到报警并想要排查问题时,CPU 飙升的…

CPU 使用率在系统监控中是一个非常重要的指标。对于大多数 Web 应用来说,它们往往是 IO 密集型的,因此只会在某些时刻可能会出现 CPU 突然飙升的情况,随后很快就恢复正常。然而,当收到报警并想要排查问题时,CPU 飙升的情况可能已经过去,无法直接查看当时 Java 进程内的线程堆栈信息。

为了解决这个问题,本文实现了一个小工具,它在 CPU 飙升时自动保存堆栈信息,方便后续问题的追踪。

该工具实现了两个主要功能:

  1. 当 CPU 使用率达到预设的阈值时,自动保存当前 Java 进程的线程堆栈信息;
  2. 输出占用 CPU 使用率最高的线程 ID。

本文选择在 Linux 系统上实现这个工具,因为大多数应用都是部署在 Linux 环境中(本来想实现一个 MacOS 版本的脚本,但捣鼓了半天,由于格式以及函数存在差异,所以就没继续纠结了)

脚本如下:

#!/bin/bash
if [ $# -ne 1 ]; thenecho "Usage: $0 <j_pid>"exit 1
fij_pid=$1
threshold=90while true; docpu_info=$(ps -p "$j_pid" -o %cpu=)cpu_usage=$(sed 's/%//g' <<< "$cpu_info")current_time=$(date +'%Y-%m-%d %H:%M:%S')echo "[-----$current_time] Current CPU Usage: $cpu_usage%"if [ $(echo "$cpu_usage > $threshold" | bc -q) -eq 1 ]; thenthread_id=$(top -b -n 1 -H -p $j_pid | grep -E "^\s*[0-9]+" | sort -k9 -r | head -n 1 | awk '{print $1}')echo "[-----$current_time] Detected! PID: $j_pid ; Thread ID: $thread_id"jstack_output=$(jstack -l $j_pid)jstack_filename="jstack_$(date +'%Y%m%d%H%M%S').txt"echo "$jstack_output" > "$jstack_filename"echo "[$current_time] jstack_filename: $jstack_filename"fisleep 10
done

可以看看效果,这是模拟的消耗 CPU 的 Java 代码:

/*** @author dongguabai* @date 2023-07-21 13:11*/
public class Test {public static void doSth() {while (true) {double x = Math.random() * Math.random();}}public static void main(String[] args) {new Thread(new Runnable() {@Overridepublic void run() {doSth();}}, "highcpu_thread").start();}
}

执行 Java 代码:

[root@MiWiFi-R4CM-srv javaTest]# javac Test.java
[root@MiWiFi-R4CM-srv javaTest]# java Test

执行脚本:

[root@MiWiFi-R4CM-srv javaTest]# sh monitor.sh 9581
[-----2023-07-21 01:37:12] Current CPU Usage: 99.3%
[-----2023-07-21 01:37:12] Detected! PID: 9581 ; Thread ID: 9590
[2023-07-21 01:37:12] jstack_filename: jstack_20230721013713.txt

查看线程 ID:
在这里插入图片描述

查看线程堆栈:

"Attach Listener" #9 daemon prio=9 os_prio=0 tid=0xb768fc00 nid=0x25a0 waiting on condition [0x00000000]java.lang.Thread.State: RUNNABLE"DestroyJavaVM" #8 prio=5 os_prio=0 tid=0xb7607400 nid=0x256e waiting on condition [0x00000000]java.lang.Thread.State: RUNNABLE"highcpu_thread" #7 prio=5 os_prio=0 tid=0xb768ec00 nid=0x2576 runnable [0xa4bb8000]java.lang.Thread.State: RUNNABLEat Test.doSth(Test.java:13)at Test$1.run(Test.java:20)at java.lang.Thread.run(Thread.java:748)

可以看到,效果还是可以的。

注意事项

在生产环境中使用此工具时,需要注意以下几点:

  1. jstack 命令可能对系统性能产生一定影响,需要谨慎使用并避免频繁执行
    • 如果 Java 进程非常大,有很多线程,那么收集线程堆栈信息的操作可能会耗费较多的系统资源
    • 触发脚本时 Java 进程本身已经处于高负载状态,运行jstack命令可能会导致 Java 进程的响应时间增加
    • 最好设置一个触发阈值,频繁地运行 jstack 命令收集线程堆栈信息,可能会在一定程度上增加系统负担
  2. 脚本最好保存在一个不容易被意外杀掉的地方,以确保在 CPU 飙升时能正常执行。
  3. 在应用刚启动的时候,可能由于初始化等操作导致短暂的 CPU 飙升,因此脚本可设置延迟执行,避免误报。
http://www.yayakq.cn/news/588431/

相关文章:

  • 西安网站制作百亿科技安阳县事业单位
  • 安徽网站排名社群运营的经典案例
  • 甪直做网站网业翻译成中文
  • 江西省网站建设先进表彰qq业务网站平台
  • 网站维护包括哪些wordpress 下划线
  • 西双版纳建设厅网站手机网站制作大约多少钱
  • 自己做网站卖能赚钱吗wordpress快讯 主题
  • 建设银行分期手机网站wordpress 源码整合
  • 网站制作怎么学免费做电脑网站
  • 网站平台怎么做的好处wordpress postfix
  • 淘宝网站小视频怎么做京东网站建设设计框架图
  • 优秀的门户网站合肥一浪网络科技有限公司
  • 任丘市网站建设价格网站热度查询
  • 一起做网站广州哔哩哔哩网站建设分析
  • 天津北辰做网站情感导师在线咨询服务
  • 潍坊企化网站建设专业美工设计网站建设
  • 上海浦东医院网站建设承德教育信息网官网
  • 网站域名需要申请搜索引擎关键词怎么选
  • 网站页面分析范文wordpress 文章列表样式
  • 太原网站建设外包别人发我网站外链会降权我吗
  • 门户网站建设运行环境要求企业咨询服务合同
  • 在线做带字头像的网站wordpress列表图片
  • 做网站对商家的好处网站为什么要备案
  • 西安建站之家网络科技有限公司承包工地的网站
  • 南通市建设监理协会网站刚刚建设的网站如何放图片
  • 工会网站建设管理工作总结珠海网站建设公司怎么样
  • 做基网站人才市场招聘网站
  • 企业网站制作托管推荐优秀的企业网站设计
  • 校园网站素材wordpress advantage
  • 网站建设岗位能力评估表无锡手机网站