pstack使用和原理[通俗易懂]

pstack使用和原理[通俗易懂]pstack使用和原理http://www.cnblogs.com/mumuxinfei/p/4366708.html前言:  最近小组在组织深入剖析Nginx>>的读书会,里面作者提到了pstack这个工具.之前写JAVA程序,对jstack这个工具,非常的喜欢,觉得很有用.于是想比较下pstack和jstack的异同.   和jstack一样,psta

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

pstack使用和原理

http://www.cnblogs.com/mumuxinfei/p/4366708.html

前言:
  最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到了pstack这个工具. 之前写JAVA程序, 对jstack这个工具, 非常的喜欢, 觉得很有用. 于是想比较下pstack和jstack的异同. 
  和jstack一样, pstack亦能展现进程的线程堆栈快照, 非常方便验证和性能评估. 本文用来简单展示下pstack的使用方式和原理.

pstack使用
  pstack使用非常的简单, 让我们写个简易多线程程序:
  pstack使用和原理[通俗易懂]
  编译执行后, 使用pstack体验下:
  pstack使用和原理[通俗易懂]
  注: 大秘密, sleep函数貌似是基于nanosleep实现的, ^_^.
  这边我们能清楚的看到两个线程在执行线, 以及当前线程的详细函数栈信息.
  对pstack的作用, 大致可以归纳如下:
  1). 查看线程数(比pstree, 包含了详细的堆栈信息)
  2). 能简单验证是否按照预定的调用顺序/调用栈执行
  3). 采用高频率多次采样使用时, 能发现程序当前的阻塞在哪里, 以及性能消耗点在哪里?
  4). 能反映出疑似的死锁现象(多个线程同时在wait lock, 具体需要进一步验证)

  当然还能举例更多的作用, 相信使用过jstack的coder, 必然深以为然.

pstack原理:
  pstack用途很大, 那其背后的原理是啥?
  可以观察发现, 其实pstack是/usr/bin/gstack的软链接, 而gstack本身是基于gdb封装的shell脚本.
  pstack使用和原理[通俗易懂]
  让我们简单分析下这个强大的shell脚本:
  pstack使用和原理[通俗易懂]
  注: 由于代码太长, 这边选取最核心的片段, backtrace=”thread apply all bt”
  shell采用了here document的方式, 完成了GDB的交互工作(注意EOF标识, 及范围内的交互命令). 
  重要的是输入thread apply all bt这个交互命令. 该命令要求输出所有的线程堆栈信息.
  对GDB输出的结果, 通过管道并借助sed命令进行了替换和过滤.

总结:
  pstack其实是gdb的一个功能封装, 但其实现的功能, 确实非常实用. 本文讲述了pstack使用和原理, 以及常见的用途, 下文将讲述死锁检测的一种机制, 欢迎关注.

写在最后:
  
如果你觉得这篇文章对你有帮助, 请小小打赏下. 其实我想试试, 看看写博客能否给自己带来一点小小的收益. 无论多少, 都是对楼主一种由衷的肯定.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193958.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信公众号开发相关流程及功能介绍怎么写_微信公众号平台官网

    微信公众号开发相关流程及功能介绍怎么写_微信公众号平台官网进入的网址:https://mp.weixin.qq.com。测试号(网址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login),用户在开发之前可以通过测试号快速测试开发,但是测试号的接口能力有限,只限测试使用。1.1.1订阅号适用于个人和组织,群发消息1条/天,消息展示在订阅号列表里,有基础消息接口,可以自定义菜单,无微信支付功能。1.1.2服务号不适用于个人,群发消息4条/月,消息展示在会话表里,有基础消息接口,有高级接

    2022年8月20日
    9
  • jmeter-实现跨线程组之间传递参数

    jmeter-实现跨线程组之间传递参数

    2021年9月18日
    57
  • SecureCRT中文乱码解决方法

    SecureCRT中文乱码解决方法SecureCRT中文乱码解决方法1、先选中当前的Session地址2、然后点击SercureCRT上排主菜单的“Options”,也就是“选项”的意思3、点击Options之后,会出现一个下拉列表,我们选择第一个“SessionOptions…”4、接着会出现一个弹出框,选择目录中的“Appearance”,该功能可以对SercureCRT的外观进行设置5、此时可以看到SercureCRT的编码格式是“Default”,也就是默认的编码格式,我们改为“UTF-8”6、改完编码格式之后,我们回

    2022年7月17日
    11
  • 组合模式 Composite[通俗易懂]

    组合模式 Composite[通俗易懂]组合模式 Composite动机模式定义实例结构要点总结笔记动机在软件某些情况下,客户代码过多地依赖于对象容器复杂的内部实现结构,对象内部实现结构(而非抽象接口)地变化将引起客户代码地频繁变化.带来代码地维护性,扩展性等弊端如何将”客户代码与复杂地对象容器结构”解耦?让对象容器自己来实现自身地复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂地对象容器模式定义将对象组合成树形结构以表示”整体-部分”地层次结构.Composite使得用户对单个对象和组合对象地使用具有一致性(稳定)实例树形

    2022年8月11日
    0
  • 继续安利两个漫画App

    继续安利两个漫画App之前安利了很多漫画App~今天继续,以防被用o(>ω<)o玄猫漫画飒漫画回复“1051”下载玄猫漫画+飒漫画回复666给Yama买一块大白兔…

    2022年6月26日
    28
  • ios长按不能粘贴_ios14长按不能复制

    ios长按不能粘贴_ios14长按不能复制/*设置IOS页面长按不可复制粘贴,但是IOS上出现input、textarea不能输入,因此将使用-webkit-user-select:auto;*/*{-webkit-touch-callout:none;/*系统默认菜单被禁用*/-webkit-user-select:none;/*webkit浏览器*/-khtml-user-select:none;…

    2022年9月29日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号