你应该知道的16个Linux服务器监控命令(2)

avatar
作者
筋斗云
阅读量:13

系统大全为您提供

nmon监控工具

[07-pmap]

pmap命令可以显示进程占用的内存量。

你可以通过pmap找到那个占用内存量最多的进程。

如下就是nignx主进程所占用的内存情况:

#pmap2395|head-n10

2395:nginx:masterprocess./sbininx

00110000240Kr-x--bbgssapi_krb5.so.2.2

0014c0004K-----bbgssapi_krb5.so.2.2

0014d0004Kr----bbgssapi_krb5.so.2.2

0014e0004Krw---bbgssapi_krb5.so.2.2

0014f00012Kr-x--bbcom_err.so.2.1

001520004Kr----bbcom_err.so.2.1

001530004Krw---bbcom_err.so.2.1

0015400048Kr-x--bbnss_files-2.12.so

001600004Kr----bbnss_files-2.12.so

...

b78e400020Krw---[anon]

b78f30004Krw-s-/dev/zero(deleted)

b78f40004Krw---[anon]

bfeaa00084Krw---[stack]

total7280K

[08/09-ps/pstree]

ps和pstree在Linux系统里是一对好兄弟,它们都是用来列出处于运行状态的进程的列表的。

ps告诉我们每个进程使用的内存量以及所消耗的CPU时间。

pstree则会告诉我们进程间的父子关系,如下便是mysql的一些父子关系信息:

#pstree-p1829

mysqld_safe(1829)───mysqld(2307)─┬─{mysqld}(2309)

├─{mysqld}(2310)

├─{mysqld}(2311)

├─{mysqld}(2312)

├─{mysqld}(2313)

├─{mysqld}(2314)

├─{mysqld}(2315)

├─{mysqld}(2316)

├─{mysqld}(2317)

├─{mysqld}(2318)

├─{mysqld}(2320)

├─{mysqld}(2321)

├─{mysqld}(2322)

├─{mysqld}(2323)

├─{mysqld}(2325)

├─{mysqld}(2544)

├─{mysqld}(2548)

├─{mysqld}(7912)

├─{mysqld}(7914)

├─{mysqld}(7916)

├─{mysqld}(24689)

├─{mysqld}(27329)

└─{mysqld}(27331)

[10-sar]

sar命令堪称系统监控工具里的瑞士军刀。

sar命令实际上是由三个程序组成的,即sar(用于显示数据)、sa1(用于采集数据)和sa2(用于存储数据)。

sar可以涵盖到CPU利用率信息、内存换页信息、网络IO传输信息、进程创建行为和存储设备行为。

sar和nmon的最大区别在于,sar更适用于长期的系统监控,而nmon则更适用于快速查看信息。

如果希望更详细的学习sar命令,可以阅读《sar访谈》-linux命令五分钟系列之二十九。

[11-strace]

starce经常被用来作为追查程序问题的工具,但他的功能远非如此。

它可以解析和记录进程的系统调用行为,这使得strace成为了一个非常有用的诊断、调查和纠错工具。

举例来说,你可以适用strace来追查到一个程序在启动之初所需加载的配置文件信息。

当然,strace也有它自身的缺陷,那就是strace会严重拖慢调查对象(某个进程)的性能和运行速度。

顺便推荐一篇非常好的strace的文章:《strace使用详解》

另外,如果你使用MAC,strace的替代品是truss。

[12-tcpdump]

tcpdump是一个简单的、好用的网络监控工具。它的网络协议分析能力使得它能够看清网络中到底发生了什么,如果你希望更细节的调查的话,可以考虑适用功能更为强大的wireshark工具。

tcpdump的系列教程“在这里”。

[13-top]

top命令可以显示系统中的进程信息。默认情况下,top会按照CPU使用率从高到低来显示系统中的进程,并且每5秒刷新一次排行榜。

当然,你也可以让top按照PID、进程寿命、CPU耗时、内存消耗等维度对进程进行排序。(我经常使用的是P和M快捷键,分别是按CPU利用率排序、按内存使用量排序)

通过top命令,你可以很快的发现那些失去控制或不符合预期的进程。

[14-uptime]

通过uptime命令可以查看系统已经运行了多久,可以统计当前处于登陆状态的用户数量,还可以显示当前服务器的负载情况。

#uptime

18:35:17up11days,9:30,1user,loadaverage:0.00,0.00,0.00

[15-vmstat]

大多数情况下,你可以使用vmstat命令去查看系统的虚拟内存情况,因为Linux通常会通过虚拟内存来获得更好的存储性能。

如果你的程序占用了大量了内存,那么系统会进行内存页换出的动作,以便把程序从内存中移动到系统SWAP空间中,也就是硬盘中。

如果系统的内存页的换入换出动作频度超过一个临界值,那么这种状态被叫做“Thrashing”。当系统处于thrashing状态时,性能会急剧下降。

vmstat命令便可以帮助人们及时发现此类问题,找出那个拖慢系统的元凶。

#vmstat1

procs-----------memory-------------swap-------io------system-------cpu-----

rbswpdfreebuffcachesisobiboincsussyidwast

20057484356864861332000173109900

000574683568648613600000336145619400

00057468356864861360000043510010000

000574683568648613600001651620010000

[16-wireshark]

Wireshark的前身叫做Ethereal,我们可以认为wireshark是tcpdump命令的大师兄,因为wireshark会更为专业,也具有更高级的协议分析和统计能力。

Wireshark同时具有GUI界面和shell借口。

如果你是一位资深的网络管理员,那么你一定使用过ethereal。而如果你正在使用wireshark/ethereal,那么我推荐你阅读Chris Sander的一本非常好的书《Practical Packet Analysis》。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!