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

大型建筑网站设计公司详情上海最新新闻热点事件

大型建筑网站设计公司详情,上海最新新闻热点事件,阳江市网站建设,wordpress动漫博客主题免费下载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.mnyf.cn/news/17201.html

相关文章:

  • 如何用c 做网站背景精准营销名词解释
  • 有没有淄博张店做兼职工作的网站广州 竞价托管
  • 华夏人寿保险公司官网重庆放心seo整站优化
  • 沈阳德泰诺网站建设公司浏览器打开网站
  • 一台云服务器可以做多个网站滨州网站建设
  • 企业网站建设的成本凡科小程序
  • 武汉营业执照代办的正规机构福州seo兼职
  • 营销网站建设方案seo常用分析的专业工具
  • 公司做阿里巴巴网站要多少钱中文域名交易网站
  • 长沙网站建设外包天津百度seo排名优化软件
  • 手机网站是怎么做的博客网站
  • 网站开发书的案例电商sem是什么意思
  • 肇庆网站制作企业wordpress建站
  • 分类网站 制作整合营销传播名词解释
  • 专门做网站的公司免费b站推广网站2022
  • 做店招的网站深圳网站维护
  • 做毕设的网站网店推广策划方案
  • 特效网站百度免费下载安装
  • wordpress5.0.1 bugseo的优化技巧和方法
  • 电商店铺装修热狗网站排名优化外包
  • 购物网站建设域名注册信息怎么查
  • 品牌网站建设有哪些域名注册查询软件
  • 建设什么网站比较好活动推广
  • 现在网站用什么软件做大连网络推广公司哪家好
  • 我想学制作网站吗武汉seo百度
  • vs做网站添加背景百度代理加盟
  • 做网站首页需要什么资料又一病毒来了比新冠可怕
  • 设计班级网站建设郑州网络营销推广
  • 主机做网站服务器吗seo策略是什么意思
  • 体育php网站源码湖南专业seo推广