进程分析工具 process_grep查看进程

进程分析工具 process_grep查看进程当进程卡住不动或者死锁时,pstack可以把当前进程的代码栈打出来,方便我们排查。用法非常简单,后面直接加进程号即可。如果是多线程的,则会打印每个线程的堆栈信息。manpstack可查看帮助[root@localhost~]#pstack7383Thread8(Thread0x7fcc0429c700(LWP7384)):#00x00007fcc0d322a82inpthread_cond_timedwait@@GLIBC_2.3.2()from/lib64/.

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

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

  1. 当进程卡住不动或者死锁时,pstack可以把当前进程的代码栈打出来,方便我们排查。
    用法非常简单,后面直接加进程号即可。如果是多线程的,则会打印每个线程的堆栈信息。
    man pstack 可查看帮助
[root@localhost ~]# pstack 7383
Thread 8 (Thread 0x7fcc0429c700 (LWP 7384)):
#0 0x00007fcc0d322a82 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007fcc08f5f299 in cnd_timedwait (cond=<optimized out>, mtx=<optimized out>, ts=<optimized out>) at tinycthread.c:462
#2 0x00007fcc08f5f67d in cnd_timedwait_abs (cnd=cnd@entry=0x25570b8, mtx=mtx@entry=0x2557090, tspec=tspec@entry=0x7fcc04299df0) at tinycthread_extra.c:100
#3 0x00007fcc08f2852e in rd_kafka_q_serve (rkq=0x2557090, timeout_ms=<optimized out>, max_cnt=max_cnt@entry=0, cb_type=cb_type@entry=RD_KAFKA_Q_CB_CALLBACK, callback=callback@entry=0x0, opaque=opaque@entry=0x0) at rdkafka_queue.c:462
#4 0x00007fcc08ef5dbc in rd_kafka_thread_main (arg=arg@entry=0x2556390) at rdkafka.c:1836
#5 0x00007fcc08f5f0f7 in _thrd_wrapper_function (aArg=<optimized out>) at tinycthread.c:576
#6 0x00007fcc0d31edc5 in start_thread () from /lib64/libpthread.so.0
#7 0x00007fcc0a3e221d in clone () from /lib64/libc.so.6
Thread 7 (Thread 0x7fcc03a9b700 (LWP 7385)):
#0 0x00007fcc0d322a82 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007fcc08f5f299 in cnd_timedwait (cond=<optimized out>, mtx=<optimized out>, ts=<optimized out>) at tinycthread.c:462
#2 0x00007fcc08f5f67d in cnd_timedwait_abs (cnd=cnd@entry=0x25580d8, mtx=mtx@entry=0x25580b0, tspec=tspec@entry=0x7fcc03a98ad0) at tinycthread_extra.c:100
#3 0x00007fcc08f2814c in rd_kafka_q_pop_serve (rkq=0x25580b0, timeout_ms=<optimized out>, version=version@entry=0, cb_type=cb_type@entry=RD_KAFKA_Q_CB_RETURN, callback=callback@entry=0x0, opaque=opaque@entry=0x0) at rdkafka_queue.c:390
#4 0x00007fcc08f28220 in rd_kafka_q_pop (rkq=<optimized out>, timeout_ms=<optimized out>, version=version@entry=0) at rdkafka_queue.c:416
... 太多了,省略

2. 查看进程树
pstree 常用参数也是后面加pid

[root@nice ~]# ps -ef|grep Demo
root      30731  10338  2 12:38 pts/0    00:00:00 ./Demo
root      30781  30696  0 12:38 pts/1    00:00:00 grep --color=auto Demo
[root@nice ~]# pstree -p 30731 
Demo(30731)─┬─{ 
   Demo}(30733)
               ├─{ 
   Demo}(30734)
               ├─{ 
   Demo}(30735)
               ├─{ 
   Demo}(30736)
               ├─{ 
   Demo}(30737)
               ├─{ 
   Demo}(30738)
  1. strace 的功能比较强大
    一般这么用-o指定输出文件,-T 统计系统函数耗时,–tt 时间戳(微妙)
strace -o output.txt -T -tt -e trace=all -p 28979

内容如下

21:58:56.981775 read(18, "\26\3\3\0A", 5) = 5 <0.003039>
21:58:56.985280 read(18, "\2\0\0=\3\3\346\351\20\300\201\305D7K}.\2107\"\237\375\266\241\301q\r\267\231R\337Z"..., 65) = 65 <0.000121>
21:58:56.985642 read(18, "\26\3\3\6\"", 5) = 5 <0.000131>
21:58:56.985953 read(18, "\v\0\6\36\0\6\33\0\3\v0\202\3\0070\202\1\357\240\3\2\1\2\2\1\0020\r\6\t*\206"..., 1570) = 1570 <0.000131>
21:58:56.986544 stat("/usr/local/mysql/ssl/certs/e86656db.0", 0x7ffcdee82ef0) = -1 ENOENT (没有那个文件或目录) <0.000148>
21:58:56.987298 stat("/usr/local/mysql/ssl/certs/e86656db.0", 0x7ffcdee82ef0) = -1 ENOENT (没有那个文件或目录) <0.000127>
21:58:56.987674 stat("/usr/local/mysql/ssl/certs/e86656db.0", 0x7ffcdee82ef0) = -1 ENOENT (没有那个文件或目录) <0.000147>
21:58:56.988023 read(18, "\26\3\3\1,", 5) = 5 <0.000134>
21:58:56.988368 read(18, "\f\0\1(\3\0\35 \261o\0R\226\177yN<\16v\305!\25\213\30\266\364\24^\301\341\255\""..., 300) = 300 <0.000134>
21:58:56.989207 read(18, "\26\3\3\0:", 5) = 5 <0.000108>
21:58:56.989555 read(18, "\r\0\0006\3\1\2@\0.\4\3\5\3\6\3\10\7\10\10\10\t\10\n\10\v\10\4\10\5\10\6"..., 58) = 58 <0.000131>
21:58:56.989889 read(18, "\26\3\3\0\4", 5) = 5 <0.000060>

以上三个工具结合起来可以分析进程在什么地方耗时过多,进而有目的的优化程序。更多详细的使用方法,可以参考man手册。

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

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

(0)
上一篇 2025年11月14日 下午2:43
下一篇 2025年11月14日 下午3:15


相关推荐

  • 代码也浪漫——Python烟花秀[通俗易懂]

    代码也浪漫——Python烟花秀[通俗易懂]下午太困,无意中看到一段用Tkinter库写的放烟花的程序,就跟着跑了一遍。设计理念:通过让画面上一个粒子分裂为X数量的粒子来模拟爆炸效果。粒子会发生“膨胀”,意思是它们会以恒速移动且相互之间的角度相等。这样就能让我们以一个向外膨胀的圆圈形式模拟出烟花绽放的画面。经过一定时间后,粒子会进入“自由落体”阶段,也就是由于重力因素它们开始坠落到地面,仿若绽放后熄灭的烟花。 首先我们写一个粒子…

    2025年11月20日
    3
  • Pycharm配置QtDesigner(PyUIC、PyRcc)

    Pycharm配置QtDesigner(PyUIC、PyRcc)Pycharm 配置 PyQt5 的 QtDesinger

    2026年3月27日
    2
  • 用了下FIREBIRD,发现真的不错哦

    用了下FIREBIRD,发现真的不错哦

    2021年7月30日
    76
  • Faster-RCNN算法精读[通俗易懂]

    Faster-RCNN算法精读[通俗易懂]读论文:《FasterR-CNN:TowardsReal-TimeObjectDetectionwithRegionProposalNetworks》摘要:算法主要解决两个问题:1、提出区域建议网络RPN,快速生成候选区域;2、通过交替训练,使RPN和Fast-RCNN网络共享参数。一、RPN网络结构RPN网络的作用是输入一张图像,输出一批矩形候选区域

    2022年10月4日
    5
  • python中astype 存在空值_python-DataFrame.astype()错误参数

    python中astype 存在空值_python-DataFrame.astype()错误参数使用列的字典时,astype引发ValueError.我试图将大DF中的稀疏列的类型转换(从float到int).我的问题是NaN值.即使将errors参数设置为’ignore’,使用列的字典时也不会忽略它们.这是一个玩具示例:t=pd.DataFrame([[1.01,2],[3.01,10],[np.NaN,20]])t.astype({0:int},errors=’ignore’)V…

    2022年5月25日
    80
  • 国外最流行的Bootstrap后台管理模板

    国外最流行的Bootstrap后台管理模板工欲善其事,必先利其器对于从事软件开发的您也一样,有一套熟悉的bootstrap后台ui框架让您的开发速度大幅度提升这是本人经常使用到的一些bootstrap后台框架推荐给大家第一名inspiniabootstrap演示地址http://cn.inspinia.cn效果图http://cn.inspinia.cnhttp://cn.inspinia.cn第二名…

    2022年4月25日
    48

发表回复

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

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