最近用gdb调试程序时,新开窗口用top命令查看调试进程的内存占用情况,但总遇到在单步调试时,由于程序执行太慢,top看不到调试进程的情况。
后查明,这是由于默认进入top时,各进程是按照CPU的占用量来排序的,单步调试程序执行太慢,有时cpu占用量为0.
解决办法:在top窗口用键盘敲“u”,然后输入当前用户名,则top窗口显示的都为该用户下的进程信息。
其他一些有用也很有意思的top视图
多U多核CPU监控
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况。
进程字段排序
1. 敲击键盘“b”(打开/关闭加亮效果),可以通过敲击“y”键关闭或打开运行态进程的加亮效果。
2. 敲击键盘“x”(打开/关闭排序列的加亮效果),通过”shift + >”或”shift + <”可以向右或左改变排序列。
改变进程显示字段
1. 敲击“f”键,top进入另一个视图,在这里可以编排基本视图中的显示字段。
这里列出了所有可在top基本视图中显示的进程字段,有”*”并且标注为大写字母的字段是可显示的,没有”*”并且是小写字母的字段是不显示的。如果要在基本视图中显示“CODE”和“DATA”两个字段,可以通过敲击“r”和“s”键。
2. “回车”返回基本视图,可以看到多了“CODE”和“DATA”两个字段。
top命令的补充
top命令是Linux上进行系统监控的首选命令,但有时候却达不到我们的要求,比如当前这台服务器,top监控有很大的局限性。这台服务器运行着websphere集群,有两个节点服务,就是【top视图 01】中的老大、老二两个java进程,top命令的监控最小单位是进程,所以看不到我关心的java线程数和客户连接数,而这两个指标是java的web服务非常重要的指标,通常我用ps和netstate两个命令来补充top的不足。
监控java线程数:
ps -eLf | grep java | wc -l
监控网络客户连接数:
netstat -n | grep tcp | grep 侦听端口 | wc -l
上面两个命令,可改动grep的参数,来达到更细致的监控要求。
在Linux系统“一切都是文件”的思想贯彻指导下,所有进程的运行状态都可以用文件来获取。系统根目录/proc中,每一个数字子目录的名字都是运行中的进程的PID,进入任一个进程目录,可通过其中文件或目录来观察进程的各项运行指标,例如task目录就是用来描述进程中线程的,因此也可以通过下面的方法获取某进程中运行中的线程数量(PID指的是进程ID):
ls /proc/PID/task | wc -l
在linux中还有一个命令pmap,来输出进程内存的状况,可以用来分析线程堆栈:
pmap PID
参考文章链接:http://www.jb51.net/article/40807.htm