找出java进程占用cpu高的元凶
有时候、会查看到服务器负载比较低、应用启动后、会出现java进程占用CPU极高,这种现象比较常见、以下我们分析一下
1、使用 top -HP 15057 查看进程中的线程占用资源情况
2、由此可以看到cpu是pid:15393 线程 吃掉了、所以目标锁定在15393上、
执行 printf "%x\n" 15393 计算出对应线程16进制
第二步:执行sudo -u www jstack 15057、获取当前进程中各线程的调用栈
对比之前计算出来的16进制id:3c21 、找到占用cpu资源最高的线程堆栈、如上图所示。
看样子问题是出现在LogUtil的255行。
这里写了一个死循环,并在255行调用了阻塞队列的poll(),很明显,方法调用错了,poll()在队列会空的时候会直接返回null,并不会阻塞等待,所以造成进程一直在这儿死循环。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现