需要监视Linux服务器的性能?试试这些内置的命令和一些附加的工具吧。大多数Linux发行版都集成了一些监视工具。这些工具可以获取有关系统活动的信息的详细指标。通过这些工具,你可以发现产生系统性能问题可能存在原因。下面讨论的是一些最基本的命令,它涉及到系统分析和调试服务器等一些问题,如:
1. 找出系统瓶颈问题.
2. 磁盘 (储存) 瓶颈问题.
3. CPU和内存瓶颈问题.
4. 网络瓶颈问题.
# 1: top – 查看活动进程的命令
TOP工具能够实时显示系统中各个进程的资源占用状况。默认情况下,它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU/内存的使用情况和执行时间对任务进行排序,并每五秒钟更新一次。
常用的快捷键
Top命令为我们提供了很多有用的快捷键,如:
快捷键 用法
t 切换显示进程和CPU状态信息。
m 切换显示进程和CPU状态信息。
A 分类显示各种系统资源的消耗情况。可用于快速识别系统的性能要求极高的任务。
o 改变显示项目的顺序。
r 重新设置进程的优先级别。(系统提示用户输入需要改变的进程PID以及需要设置的优先级值。)
k 终止一个进程。(系统将提示用户输入需要终止的进程PID)
s 改变刷新的时间间隔。
u 查看指定用户的进程。
=> Related:要了解更多关于top的用法,请参考系统帮助文档。
# 2: vmstat – 系统活动、硬件以及系统信息
这个命令用来报告关于内核线程、虚拟内存、磁盘、陷阱和CPU活动的统计信息。
# vmstat 3
输出样例:
[[email protected] ~]# vmstat 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 81408 93036 418400 0 0 20 13 69 125 1 1 97 2 0
0 0 0 81316 93044 418396 0 0 0 36 46 46 0 0 99 1 0
0 0 0 81324 93044 418400 0 0 0 0 49 50 0 0 100 0 0
0 0 0 81348 93044 418400 0 0 0 0 49 44 0 0 100 0 0
0 0 0 81348 93044 418400 0 0 0 32 44 46 0 0 100 0 0
显示内存使用情况:
# vmstat –m
=> Related: 要了解更多关于vmstat的用法,请参考系统帮助文档。
# 3: w – 找到已登陆的用户并且查看他们做了什么操作
W命令用来显示机器上最近登陆的用户信息以及他们的进程信息。
# w username
# w vivek
输出样例:
[[email protected] ~]# w
17:07:28 up 7:50, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root pts/0 192.168.10.21 09:24 0.00s 1:04 0.00s w
# 4: uptime – 系统已运行的时间
Uptime命令可以查看系统已经运行了多长时间。截止当前时间日期,系统已经运行了多长时间,当前登录的用户有哪些,已经在过去的1,5,15分钟,系统的平均负载值情况。
# uptime
输出样例:
17:09:32 up 7:52, 1 user, load average: 0.00, 0.00, 0.00
1通常被认为是最佳的负载值。系统负载值根据系统的不同而不同。对于单CPU的系统,负载值在1-3为正常,SMP的系统,负载值在6-10之间也是可以接受的。(看具体的情况)
# 5: ps – 显示进程
ps命令用来报告当前进程的快照。要选择所有进程,使用-A或-e选项:
# ps –A
输出样例:
Ps命令跟top相似,但ps为我们提供了更多的信息。
以长格式显示输出:
# ps –Al
查看线程:(LWP和NLWP):
# ps –AlFH
To See Threads After Processes:
# ps –AlLm
在服务器上打印出所有进程:
# ps ax
# ps axu
打印出进程树:
# ps –ejH
# ps axjf
# pstree
See Every Process Running As User Vivek:
# ps -U vivek -u vivek u
设置以用户定义的格式输出:
# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
# ps -eopid,tt,user,fname,tmout,f,wchan
只显示lighttpd的进程树:
# ps -C lighttpd -o pid=
Or
# pgrep lighttpd
Or
# pgrep -u vivek php-cgi
显示pid为55977的进程名:
# ps -p 55977 -o comm=
找出最耗费内存的前10个进程:
# ps -auxf | sort -nr -k 4 | head -10
找出最耗费CPU的前10个进程:
# ps -auxf | sort -nr -k 3 | head -10
# 6: free – 查看内存的使用情况
free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s <间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
# free
输出样例:
[[email protected] ~]# free
total used free shared buffers cached
Mem: 1004412 912812 91600 0 93080 411008
-/+ buffers/cache: 408724 595688
Swap: 1048568 60 1048508
ree的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free)。
第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(free),第二列是使用量(free),第三列是可用量(free)。第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:
999212KB(缺省时free的单位为KB)物理内存,即FO[2][1];
在这些物理内存中有967476KB(即FO[2][2])被使用了;
还用31736KB(即FO[2][3])是可用的;
=> Related: 要了解更多关于free的东西,请百度或者google之。
# 7: iostat – 监视CPU平均负载值,I/O状态
该命令用于报告CPU和输入/输出设备,分区和网络文件系统(NFS)的详细统计数据。
# iostat
输出样例:
基本使用:
# iostat -d -k 1 10
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。
# iostat -d -k 1 10
# 8: sar - 收集和报告系统状态信息
Sar 命令是用来收集,报告和保存系统活动信息的。
Sar 把自已收集的数据以二进制格式保存在[img]file:///C:\Users\ADMIN_~1\AppData\Local\Temp\[LC3U)F{0XCAB)[email protected][/img]ar/log[img]file:///C:\Users\ADMIN_~1\AppData\Local\Temp\{)_G62``_[8)(8ND1X0_M7L.gif[/img]里
使用 sar -d 可以得到当天磁盘活动的情况汇总
sar -n DEV 则能给出网络接口的统计信息
sar -A 可以报告所有的信息
sar 适用于快速粗略了解历史信息。
sar 命令行的常用格式: sar [options] [-o file] t [n]
options 为命令行选项,sar命令的选项很多,下面只列出常用选项:
-A:所有报告的总和。
-u:CPU利用率
-v:进程、I节点、文件和锁表状态。
-d:硬盘使用报告。
-r:没有使用的内存页面和硬盘块。
-g:串口I/O的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。
# 9: mpstat – 实时系统监视工具
mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。
下面只介绍mpstat与CPU相关的参数,mpstat的语法如下:
Usage: mpstat [ options... ] [ <interval> [ <count> ] ]
Options are:
[ -P { <cpu> | ALL } ] [ -V ]
显示每个进程对CPU的平均利用率:
# mpstat -P ALL
输出样例:
#10: pmap – 查看进程使用内存的情况
pmap命令用来报告进程使用对于的相应内存的情况。使用下面命令可以查出某些内存瓶颈问题的原因。
# pmap -d PID
显示进程号为47394的进程所用内存的信息:
# pmap -d 3315
输出样例:
3315: sshd: [email protected]/0
Address Kbytes Mode Offset Device Mapping
00007f1c70798000 1280 rw-s- 0000000000000000 000:00004 zero (deleted)
00007f1c708d8000 16 r-x-- 0000000000000000 008:00005 pam_limits.so
00007f1c708dc000 2044 ----- 0000000000004000 008:00005 pam_limits.so
00007f1c70adb000 4 r---- 0000000000003000 008:00005 pam_limits.so
00007f1c70adc000 4 rw--- 0000000000004000 008:00005 pam_limits.so
00007f1c70add000 8 r-x-- 0000000000000000 008:00005 pam_keyinit.so
......
......
00007fff80661000 84 rw--- 0000000000000000 000:00000 [ stack ]
00007fff80720000 4 r-x-- 0000000000000000 000:00000 [ anon ]
ffffffffff600000 4 r-x-- 0000000000000000 000:00000 [ anon ]
mapped: 100364K writeable/private: 1064K shared: 2560K
最后一行非常重要:
mapped: 100364K total amount of memory mapped to files.
writeable/private: 1064K the amount of private address space.
shared: 2560K the amount of address space this process is sharing with others.
#11 : netstat 和 ss – 查看网络情况
netstat命令显示网络连接,路由表,网络接口统计,伪装连接,组播成员身份。ss命令类似netstat命令的信息。关于ss和netstat命令,您可以参阅系统帮助文档或者互联网上的资源。
#12: iptraf – 实时网络状况监视工具
iptraf是一款彩色的交互式的IP局域网监控工具。这是一个基于ncurses的IP LAN监视工具,它会统计网络中产生的各种数据,包括TCP信息,UDP连接数,ICMP和OSPF信息,以太网负载信息,节点统计,IP校验和错误,以及其他信息。并且提供:
Network traffic statistics by TCP connection
IP traffic statistics by network interface
Network traffic statistics by protocol
Network traffic statistics by TCP/UDP port and by packet size
Network traffic statistics by Layer2 address
上图是General interface statistics: IP traffic statistics by network interface
上图是网络连接中建立的TCP连接信息的统计
#13: tcpdump – 网络状况分析工具
tcpdump用来抓包的一个的简单命令。但是,要使用该工具,你需熟悉TCP /IP协议。例如:显示网络中有关DNS的信息,请输入:
# tcpdump -i eth1 ‘udp port 53‘
显示去往202.54.1.5的所有ftp会话信息:
# tcpdump -i eth1 ‘dst 202.54.1.5 and (port 21 or 20‘
显示去往192.168.1.5的所有HTTP会话信息:
# tcpdump -ni eth0 ‘dst 192.168.1.5 and tcp and port http‘
使用Wireshark查看tcpdump抓包文件的详细信息,输入:
# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80
#14]: strace – 系统调用工具
strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统呼叫及它所接收的系统信息。strace是一个有用的小工具,它可以通过跟踪系统调用来让你知道一个程序在后台所做的事情。Strace是一个基础的调试工具,在大多数 Linux系 统上默认已经安装;但是即便你不是在跟踪一个问题的时候它也是一个极好的软件。它能告诉你很多关于一个Linux程序怎样工作的信息。
#15: /Proc 文件系统
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。几个例子:
# cat /proc/cpuinfo
# cat /proc/meminfo
# cat /proc/zoneinfo
# c。at /proc/mounts
Related: 要更详细地去了解/proc文件系统,你可以去查看官方文档
#16: Nagios – 服务器和网络信息监视工具
Nagios是一款很流行的开源系统和网络监控应用软件。你可以很轻松地用它监控所有的主机,网络设备和服务。在系统或服务状态异常时会第一时间通知网站运维人员(发出邮件或短信报警),在状态恢复正常后发出邮件或短信通知。
#17: Cacti -基于WEB的监视工具
Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善。界面友好。CACTI软件Cacti 的发展是基于让 RRDTool 使用者更方便使用该软件,除了基本的 Snmp 流量跟系统资讯监控外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图。
#18: KDE System Guard – 图形化的系统监视工具
KDE System Guard (KSysguard)是KDE的任务管理和性能监控工具。它采用client/server架构,可以监控本机也可以监控远端主机。
一篇51CTOblog的博文,对KDE System Guard的介绍很详细,有兴趣的朋友去看看。
http://linuxshow.blog.51cto.com/1572053/371657
#19: Gnome System Monitor – 图形化系统监视工具
它可以显示系统信息,监视系统进程,系统资源负载情况,以及文件系统。你也可以用它来提高系统性能。尽管功能不像KDE System Guard那么强大,但作为Gnome桌面环境的图形化性能分析工具,Gnome System Monitor可以图形化显示性能相关系统资源用于发现可能的峰值和瓶颈。产生的所有统计信息都是实时,要想做长时间的性能分析需使用其它工具来完成。
功能:
Displays various basic information about the computer‘s hardware and software.
Linux Kernel version
GNOME version
Hardware
Installed memory
Processors and speeds
System Status
Currently available disk space
Processes
Memory and swap space
Network usage
File Systems
Lists all mounted filesystems along with basic information about each.
其他工具:
nmap – 扫描主机的端口开放情况.
lsof - 列出系统当前打开的文件,网络连接以及更多信息。
ntop web based tool – Ntop是一款监控网络流量工具,它显示的网络状况更加直观、详细。Ntop甚至可以列出每个节点计算机的网络带宽利用率。它是一个灵活的、功能齐全的,用来监控和解决局域网问题的工具;可以自动从网络中识别有用的信息;将截获的数据包转换成易于识别的格式;对网络环境中通信失败的情况进行分析;探测网络通信的时间和过程等。
Conky - Conky是x-window下,一款免费的,轻量级系统监控的工具。它能够监控许多系统环境的状态,其中包括的CPU,内存,交换空间,磁盘存储,温度,进程,网络接口,电池电量,系统消息,电子邮件收件箱等。
GKrellM – 它来用于监测CPU状态,内存,硬盘,网络接口,本地和远程邮箱,以及其他的东西等。
vnstat – vnstat是一个基于控制台的网络流量监控软件,它会保持每月,每天,每小时,监视并记录所选定网络接口的网络通信状况。
htop – htop是一个增强版本的top,同时也是一个交互式进程查看器,它可以以树状结构来显示进程列表。
mtr – mtr在单一的网络诊断工具上,结合了traceroute和ping程序的功能。