首页 > 系统相关 >项目运行内存异常问题排查

项目运行内存异常问题排查

时间:2024-09-15 16:24:58浏览次数:8  
标签:java HandlerTask com 排查 handler 线程 内存 test 异常

一:通过命令排查:
有的时候在生产环境是无法使用Jprofiler等工具的,我们只能借助jdk提供的相关命令进行排查
top:使用Top命令排查CPU消耗很高的进程
top -H -p pid :查到进程消耗的CPU很高的情况下我们可以通过以下命令来定位到那个线程消耗的CPU高

转换16进制:因为java中查看线程号使用的是16进制我们需要将linux中的线程号转换为java中能够使用的16进制
print "%x" 95911 -> (执行后获取到执行16进制的pid是 176a7)

查看进行运行状态 ——》jstack 95891|grep 176a7 :使用 jstack 进程id|grep tid 转换成16进制后的数字,查看该线程是否运行

排查代码:jstack 95891|grep 176a7 -A20 -B20 (显示当前线程后面CPU消耗很高的线程的堆栈信息,)

二:Arthas排查
1,运行Arthas :java -jar arthas-boot.jar (选择加载一个java进程)
2,dashboard :使用 dashboard 来查看全局的性能监控
3,thread pid 的形式开查看具体线程内容(比如:thread 15)
4,反编译代码:可以使用jad工具进行反编译,查看具体哪里有问题 (比如:jad com.xuexi.test.handler.HandlerTask)
5,导出当前的内内存中的类的原代码:jad --source-only --lineNumber true com.xuexi.test.handler.HandlerTask >/tmp/HandlerTask.java
--lineNumber true 显示行数(默认true)
6,跟踪方法调用:trace com.xuexi.test.handler.HandlerTask execute (怀疑这个方法有问题,可以尝试用 trace 方法来进行调用一次)
7,修改原代码 :修改刚刚导出的类的原代码(vi /tmp/HandlerTask.java)(注意:推荐本地修改代码,编译好后再上传到服务器上)
查看类信息:sc -d com.xuexi.test.handler.HandlerTask
8,查找类加载器 :我们需要用替换类的类加载器对于我们修改后的原代码进行编译(sc -d com.xuexi.test.handler.HandlerTask | grep classLoaderHash)
9,热编译:通过类加载器将我们的类进行编译(mc -c 31cefde0 /tmp/HandlerTask.java [-d /tmp])
10,加载新类:编译后就可以在不重启的情况下加载新类,使用redefine命令重新加载新编译好的HandlerTask.class (redefine [-c 31cefde0] /tmp/com/xuexi/test/handler/HandlerTask.class)

标签:java,HandlerTask,com,排查,handler,线程,内存,test,异常
From: https://www.cnblogs.com/maxw-obj/p/18415331

相关文章

  • 整数在内存中的存储&&原码反码补码
    目录1.整数在内存中以二进制的形式存在1.1(正数存储情况)1.2负数存储情况1.3整数的补码如何得到原码2.无符号整数的原反补码 小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 1.整数在内存中以二进制的形式存在1.1(正数存储情况)比如说数字2......
  • 脚本 $'\r': command not found异常解决办法
    1、运维人员在日常工作中需要写一些shell脚本监控服务器资源使用情况:2、下面一个监控脚本:echo-e"服务器名称,CPU使用率,内存使用率,磁盘总空间,磁盘使用率,磁盘剩余空间"cpu=$(top-b-n1|grep"^%Cpu"|awk'{printf"%.2f%%",$2+$4}')mem=$(free-m|awk'NR==2{printf......
  • Linux内存管理方式
    Linux内存管理涉及到多个方面,包括物理内存的分配和回收、虚拟内存的管理、页面置换、内存保护等。以下是Linux内存管理的主要方式和机制:1.虚拟内存(VirtualMemory)虚拟地址空间:每个进程拥有自己的虚拟地址空间,虚拟地址空间与物理内存是分开的。进程在运行时使用虚拟地......
  • 7.Java面向对象第七章 异常
    6.Java面向对象异常文章目录6.Java面向对象异常二、抛出异常三、声明异常四、自定义异常try{可能会报错的代码}catch(Exceptione){异常处理代码}try{可能会报错的代码}cstch(Exceptione){异常处理代码}finally{不管程序是否报错......
  • 解决服务器首次请求异常耗时问题
    1.问题描述在我们的图像识别API服务中,我们遇到了一个棘手的问题:服务器在首次接收请求时,响应时间异常地长,经常导致超时错误。这不仅影响了用户体验,还可能导致系统不稳定。现象:测试接口在首次调用时出现超时后续请求则能正常响应复现方法:只需在服务重启后或长......
  • 容器为created状态没有日志问题排查
    容器处于created状态且没有日志,通常意味着容器已经被成功创建,但尚未启动。以下是可能的原因及排查步骤:1.检查容器状态你可以使用以下命令确认容器的状态:dockerps-a这将列出所有容器,查看是否显示为created。2.启动容器如果容器处于created状态,可能还没有启动。你可......
  • C语言进阶【3】---C语言内存函数(你确定你很了解内存函数吗?)
    本章概述本章函数概述memcpy使用和模拟memmove使用和模拟memset函数的使用memcmp函数的使用彩蛋时刻!!!本章函数概述我们在本章的博客中讲的内容是有关内存的操作,我们直接通过内存块对数据进行操作。因为我们是直接对内存块操作,所以可以对任意类型数据进行操作(我们没......
  • 记一次 公司.NET项目部署在Linux环境压测时 内存暴涨分析
    一:背景讲故事公司部署在某碟上的项目在9月份压测50并发时,发现某个容器线程、内存非正常的上涨,导致功能出现了异常无法使用。根据所学,自己分析了下线程和内存问题,分析时可以使用lldb或者windbg,但是个人比较倾向于界面化的windbg,所以最终使用windbg开干。二:WinDbg分析到底是......
  • 服务器释放内存对网站有影响
    服务器释放内存是维持系统稳定性和性能的常规操作。然而,如果处理不当,这一过程可能会对网站运营产生一定的影响。以下是服务器释放内存可能对网站造成的影响:应用程序重启:如果服务器释放内存导致运行中的应用程序被重启,那么在此过程中,网站可能会短暂不可访问或响应变慢。数据丢失风险......
  • MATLAB中的异常处理机制:掌握错误和警告的管理
    在MATLAB编程中,异常处理是一个关键组成部分,它允许程序员管理和响应在程序执行过程中可能发生的错误和警告。MATLAB提供了一套完整的机制来捕获、处理和引发异常,这些机制基于try/catch语句,以及error和warning函数。1.异常处理概述异常处理是确保程序在遇到错误时能够优雅......