SA的操作,最主要是通过系统调用ptrace实现 。ptrace会使内核暂停目标进程并将控制权交给跟踪进程,使跟踪进程得以察看目标进程的内存 。这是一个很危险的操作,会造成机密数据泄漏,所以ptrace-scope为了防止用户访问当前正在运行的进程的内存和状态,默认情况下不允许再访问了,我们可以使用sudo赋于权限来解决这个问题 。
常用工具:
(1)JDK自带的 jmap、jstack、jinfo、HSDB等工具
(2)vjmap是分代版的jmap(新生代,存活区,老生代),是排查内存缓慢泄露,老生代增长过快原因的利器,也是利用了SA的原理,
https://github.com/vipshop/vjtools/tree/master/vjmap
注意,当SA 开始分析时,整个目标JVM是停顿下来不工作的,让SA可以从容读取进程内存中的数据,直到断开后才会恢复 。所以在生产环境上使用有SA技术的工具时,必须先摘除流量 。
9、Crash文件造成严重错误的原因有多种可能性 。Java虚拟机自身的Bug是原因之一,但是这种可能不是很大 。在绝大多数情况下,
是由于系统的库文件、API或第三方的库文件造成的;系统资源的短缺也有可能造成这种严重的错误 。
当JVM发生致命错误导致崩溃时,会生成一个hs_err_pid_xxx.log这样的文件,该文件包含了导致 JVM crash 的重要信息,我们可以通过分析该文件定位到导致 JVM Crash 的原因,从而修复保证系统稳定 。
默认情况下,该文件是生成在工作目录下的,当然也可以通过 JVM 参数指定生成路径:
java -XX:ErrorFile=/var/log/hs_err_pid<pid>.log这个文件主要包含如下内容:
- 日志头文件
- 导致 crash 的线程信息
- 所有线程信息
- 安全点和锁信息
- 堆信息
- 本地代码缓存
- 编译事件
- gc 相关记录
- jvm 内存映射
- jvm 启动参数
- 服务器信息
作者:鸠摩
出处:【全网首发】揭密Java常用性能调优工具的底层实现原理 | HeapDump性能社区
推荐阅读
- 使用Java读取、编写、确认Excel文档
- Pandas 28种常用方法使用总结
- 饵料|夏季钓鲤鱼常用的调漂技巧
- 鲫鱼|野钓鲫鱼的特殊窝料,钓王邓刚最常用的鲫鱼窝料
- 黑客必修:批处理常用网络命令和符号——网络命令
- 11 种糟糕的 JavaScript 编写方式
- JavaScript中的四种枚举方式
- JavaScript检测用户是否在线!
- 你必须知道的常用的足够简练的 11 个 Python代码
- JavaScript 的 Anti-Debugging 技術
