编辑
2024-05-20
工具
00

Java 应用 CPU 占用过高排查手册

当线上 Java 应用出现 CPU 占用过高时,快速定位问题线程并分析其行为至关重要。以下就是一个详细的排查步骤,结合实际日志示例,可方便一步步诊断问题。

一、排查背景

在高并发或复杂业务场景下,Java 应用偶尔会出现 CPU 飙升的情况。这可能是由于代码中存在死循环、不合理的线程同步、频繁的 GC、或是某些耗时操作阻塞了核心线程等原因。及时有效的排查能够帮助我们快速恢复服务,并优化应用性能。

二、排查步骤

1. 识别高 CPU 占用的 Java 进程

首先,我们需要在服务器上找出哪个 Java 进程占用了较高的 CPU。

命令top

操作: 在 Linux 终端执行 top 命令,然后按 Shift + P 以 CPU 使用率排序,找到 CPU 占用较高的 Java 进程,并记录其 PID (Process ID)。

示例日志

text
top - 23:19:57 up 8 days, 5:28, 3 users, load average: 0.25, 0.17, 0.15 Tasks: 230 total, 1 running, 229 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.9 us, 0.6 sy, 0.0 ni, 97.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 7911152 total, 146560 free, 6164640 used, 1599952 buff/cache KiB Swap: 1049596 total, 4 free, 1049592 used. 1185832 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9782 git 20 0 2259716 1.0g 5012 S 5.0 13.6 494:50.66 bundle 31924 root 20 0 820456 16748 2576 S 2.0 0.2 42:02.84 barad_agent 16666 root 20 0 1066072 94192 11436 S 1.0 1.2 120:28.35 YDService 16135 ctm 20 0 3930436 407140 3132 S 0.7 5.1 33:20.42 java <-- 假设这是我们的目标Java进程 8511 git 20 0 1634656 20008 2436 S 0.3 0.3 8:56.97 gitlab-kas 14498 100 20 0 1023052 39656 752 S 0.3 0.5 35:27.95 python 1 root 20 0 194004 5524 3156 S 0.0 0.1 2:30.51 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.16 kthreadd

从上面的示例中,我们假设 PID 16135 (COMMAND java) 是我们要排查的 Java 进程,其 CPU 占用为 0.7%(注意:在实际高 CPU 场景中,这个百分比会显著更高。此处的日志仅为步骤演示。)

编辑
2024-05-07
摘录
00

thin模式的意义

使用thin模式降低spring boot包大小。 也就是说,依赖的那些jar不打到fatjar里。从而把动辄100M以上的包,降低到1M的规模。

为什么要做这个事儿呢?实际上我们项目里依赖的那些jar,版本是不会经常变动的。每次打包都带上,导致我们发布过程要一直带了一些很重的制品大小。 所以thin模式还是有价值和意义的。

其实在很早的时候,我们使用tomcat部署多个war,会把一些公用的jar,比如spring,直接丢到tomcat的lib下,这样这些war就不要带spring的那些依赖jar了,从而实现了war包瘦身的目的。

编辑
2024-04-19
摘录
00

一、什么是 WebSocket

WebSocket 是 HTML5 下一种新的协议(WebSocket 协议本质上是一个基于 TCP 的协议)。它实现了浏览器与服务器全双工通信,能更好地节省服务器资源和带宽并达到实时通讯的目的。WebSocket 是一个持久化的协议。

二、WebSocket 的原理

WebSocket 约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似 TCP 的连接,从而方便它们之间的通信。在 WebSocket 出现之前,Web 交互一般是基于 HTTP 协议的短连接或者长连接。WebSocket 是一种全新的协议,不属于 HTTP 无状态协议,协议名为 "ws"。

WebSocket 与 HTTP 的关系

编辑
2024-04-18
工具
00

该文章已加密,点击 阅读全文 并输入密码后方可查看。

编辑
2024-04-10
MQ
00

ActiveMQ 升级配置步骤总结

注意

官方修复建议

  1. 官方已发布漏洞补丁及修复版本,建议受漏洞影响的用户请评估业务是否受影响后,酌情升级至安全版本,参考链接:Tags · apache/activemq · GitHub
  2. 建议不要把 Apache ActiveMQ 系统直接对公网开放(默认端口:616168161)。

一、拉取修复更新版本的源码 ( 版本 > 5.18.3 )

备注:此时最新版本的 activemq 5.18.4 已经发布(修复版本都需要Jdk11环境,否则会报错如下所示

js
Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/activemq/console/Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 ..