系统运行维护、监控或性能测试时,需要查询Linux服务器的运行状态信息,桌面环境下可以使用 gnome-system-monitor 或 KDE System Guard 来简单查询。
可用的命令行工具更多更详细,如下大多数是从各处摘抄总结而来:
===========================================
ps命令
查看某个进程的信息,Pid通过ps aux| grep ‘java’ 或top命令得到。找出消耗内存最多的前10名进程
# ps -auxf | sort -nr -k 4 | head -10
找出使用CPU最多的前10名进程
# ps -auxf | sort -nr -k 3 | head -10
===========================================
1、top命令
第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下: 14:48:55 当前时间 up 7 days, 16:41, 系统运行时间,格式为天,时:分 1 user 当前登录用户数 load average: 0.00, 0.00, 0.00 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 第二行是进程信息,分别代表进程总数,运行进程数,睡眠进程数,已挂起进程数,无用的进程数。 第三行是CPU信息,分别是us用户空间占用CPU百分比, sy 内核空间占用CPU百分比,ni 用户进程空间内改变过优先级的进程占用CPU百分比, id 空闲CPU百分比, wa 等待输入输出的CPU时间百分比。 第四行是内存信息,分别是物理内存总量, used 使用的物理内存总量, free 空闲内存总量, buffers 用作内核缓存的内存量 第五行是交换区信息,分别是交换区总量, used 使用的交换区总量。 free 空闲交换区总量。cached 缓冲的交换区总量。
2、iostat命令
查询服务器的I/O状态数据,
用法: iostat [-c|-d] [-k] [-t] [间隔描述] [检测次数]-c : 仅显示cpu的状态 -d : 仅显示存储设备的状态,不可以和-c一起使用 -k : 默认显示的是读入读出的block信息,用-k可以改成KB大小来显示 -t : 显示日期 -p device | ALL : device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息
常用命令:
iostat -d -k 1 10 #查看TPS和吞吐量信息
iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
iostat -c 1 10 #查看cpu状态
3、cat /proc/[pid]/* 或 cat /proc/*
几乎可以查看所有系统信息,其中[pid]使用进程的pid号代入。
cat /proc/[pid]/status
输出解释: Name 应用程序或命令的名字 State 任务的状态,运行/睡眠/僵死/ SleepAVG 任务的平均等待时间(以nanosecond为单位),交互式任务因为休眠次数多、时间长,它们的 sleep_avg 也会相应地更大一些,所以计算出来的优先级也会相应高一些。 Tgid 线程组号 Pid 任务ID Ppid 父进程ID TracerPid 接收跟踪该进程信息的进程的ID号 Uid Uid euid suid fsuid Gid Gid egid sgid fsgid FDSize 文件描述符的最大个数,file->fds Groups VmSize(KB) 任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页 VmLck(KB) 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm) VmRSS(KB) 应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss) VmData(KB) 程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm) VmStk(KB) 任务在用户态的栈的大小 (stack_vm) VmExe(KB) 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code) VmLib(KB) 被映像到任务的虚拟内存空间的库的大小 (exec_lib) VmPTE 该进程的所有页表的大小,单位:kb Threads 共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符。 SigQ 待处理信号的个数 SigPnd 屏蔽位,存储了该线程的待处理信号 ShdPnd 屏蔽位,存储了该线程组的待处理信号 SigBlk 存放被阻塞的信号 SigIgn 存放被忽略的信号 SigCgt 存放被俘获到的信号 CapInh Inheritable,能被当前进程执行的程序的继承的能力 CapPrm Permitted,进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的,CapEff是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性 CapEff Effective,进程的有效能力
其实解释可以输入以下命令得到:
man proc
/proc/[pid]/statm Provides information about memory usage, measured in pages. The columns are: size total program size (same as VmSize in /proc/[pid]/status) resident resident set size (same as VmRSS in /proc/[pid]/status) share shared pages (from shared mappings) text text (code) lib library (unused in Linux 2.6) data data + stack dt dirty pages (unused in Linux 2.6)
4、jstat -gc pid 1000
查看GC情况的命令。
S0C:年轻代中第一个survivor(幸存区)的容量 (字节) S1C:年轻代中第二个survivor(幸存区)的容量 (字节) S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节) S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节) EC:年轻代中Eden(伊甸园)的容量 (字节) EU:年轻代中Eden(伊甸园)目前已使用空间 (字节) OC:Old代的容量 (字节) OU:Old代目前已使用空间 (字节) PC:Perm(持久代)的容量 (字节) PU:Perm(持久代)目前已使用空间 (字节) YGC:从应用程序启动到采样时年轻代中gc次数
===========================================
工具 |
简单介绍 |
top |
查看进程活动状态以及一些系统状况 |
vmstat |
查看系统状态、硬件和系统信息等 |
iostat |
查看CPU 负载,硬盘状况 |
sar |
综合工具,查看系统状况 |
mpstat |
查看多处理器状况 |
netstat |
查看网络状况 |
iptraf |
实时网络状况监测 |
tcpdump |
抓取网络数据包,详细分析 |
mpstat |
查看多处理器状况 |
tcptrace |
数据包分析工具 |
netperf |
网络带宽工具 |
dstat |
综合工具,综合了 vmstat, iostat, ifstat, netstat 等多个信息 |
===========================================
系统监控需要安装psacct,sysstat,SysVinit三个rpm软件安装包
一.
显示系统内核消息
uname -srvmo
显示系统运行时间和平均负载
uptime
显示系统进程列表
ps aux
显示系统物理内存和交换区的使用
free
显示系统的磁盘空间用量
df -h
显示磁盘分区
fdisk -l
显示系统PCI信息,也可以使用-v 或-vv显示更全面的信息,使用lsusb显示usb信息
lspci
显示正在运行的进程,内存,cpu信息:空格更新;K杀死指定的进程;N改变要显示的进程数量;U,M,P分别按用户,内存用量,cpu用量排序
top
watch观察连续不断更新的文件
watch [-dn] <command> d高亮显示差异的内容,n设置间隔时间;command不能是alias
watch tail /var/log/messages
watch -d -n 10 tail /var/log/messages
watch -d "tail /etc/httpd/logs/access_log;tail /etc/httpd/logs/error_log"
watch "ps aux|grep top|grep -v 'grep'"
sysstat工具
主要观察服务负载,cpu内存占用率,网络使用率,磁盘写入写出读取速度等
sysstat工具包含两类:即使统计工具(iostat,mpstat,sar)和累计统计工具(sar)
二
lsof工具
Lsof是遵从Unix哲学的典范,它只做一件事情,并且做的相当完美——它可以列出某个进程打开的所有文件信息。打开的文件可能是普通的文件,目录,NFS文件,块文件,字符文件,共享库,常规管道,明明管道,符号链接,Socket流,网络Socket,UNIX域Socket,以及其它更多。因为Unix系统中几乎所有东西都是文件,你可以想象lsof该有多有用。
找出谁在使用某个文件
lsof /path/to/file 只需要执行文件的路径,lsof就会列出所有使用这个文件的进程,你也可以列出多个文件,lsof会列出所有使用这些文件的进程。
你也可以一次制定多个文件:
# lsof /path/to/file1 /path/to/file2
递归查找某个目录中所有打开的文件
# lsof +D /usr/lib 加上+D参数,lsof会对指定目录进行递归查找,注意这个参数要比grep版本慢:
# lsof | grep '/usr/lib' 之所以慢是因为+D首先查找所有的文件,然后一次性输出。
列出某个用户打开的所有文件
# lsof -u rms,root 这条命令会列出所有rms和root用户打开的文件。
你也可以像下面这样使用多个-u做同样的事情:# lsof -u rms -u root
查找某个程序打开的所有文件
# lsof -c apa 这会列出所有以apa开头的进程打开的文件
你同样可以制定多个-c参数:
# lsof -c apache -c python 这会列出所有由apache和python打开的文件
列出所有由某个用户或某个进程打开的文件
# lsof -u pkrumins -c apache
你也可以组合使用多个选项,这些选项默认进行或关联,也就是说上面的命令会输入由pkrumins用户或是apache进程打开的文件。
列出所有由一个用户与某个进程打开的文件
# lsof -a -u pkrumins -c bash
-a参数可以将多个选项的组合条件由或变为与,上面的命令会显示所有由pkrumins用户以及bash进程打开的文件。
列出除root用户外的所有用户打开的文件
# lsof -u ^root 注意root前面的^符号,它执行取反操作,因此lsof会列出所有root用户之外的用户打开的文件。
列出所有由某个PID对应的进程打开的文件
# lsof -p 1 -p选项让你可以使用进程id来过滤输出。
记住你也可以用都好来分离多个pid。 # lsof -p 450,980,333
列出所有进程打开的文件除了某个pid的
# lsof -p ^1 同前面的用户一样,你也可以对-p选项使用^来进行取反。
列出所有网络连接
# lsof -i lsof的-i选项可以列出所有打开了网络套接字(TCP和UDP)的进程。
列出所有TCP网络连接
# lsof -i tcp 也可以为-i选项加上参数,比如tcp,tcp选项会强制lsof只列出打开TCP sockets的进程。
列出所有UDP网络连接
# lsof -i udp 同样udp让lsof只列出使用UDP socket的进程。
找到使用某个端口的进程
# lsof -i :25 :25和-i选项组合可以让lsof列出占用TCP或UDP的25端口的进程。
你也可以使用/etc/services中制定的端口名称来代替端口号,比如: # lsof -i :smtp
找到使用某个udp端口号的进程 # lsof -i udp:53
同样的,也可以找到使用某个tcp端口的进程: # lsof -i tcp:80
找到某个用户的所有网络连接
# lsof -a -u hacker -i 使用-a将-u和-i选项组合可以让lsof列出某个用户的所有网络行为。
列出所有NFS(网络文件系统)文件
# lsof -N 这个参数很好记,-N就对应NFS。
列出所有UNIX域Socket文件
# lsof -U 这个选项也很好记,-U就对应UNIX。
列出所有对应某个组id的进程
# lsof -g 1234 进程组用来来逻辑上对进程进行分组,这个例子查找所有PGID为1234的进程打开的文件。
列出所有与某个描述符关联的文件
# lsof -d 2 这个命令会列出所有以描述符2打开的文件。
你也可以为描述符指定一个范围:
# lsof -d 0-2 这会列出所有描述符为0,1,2的文件。
-d选项还支持其它很多特殊值,下面的命令列出所有内存映射文件: # lsof -d mem
txt则列出所有加载在内存中并正在执行的进程: # lsof -d txt
输出使用某些资源的进程pid
# lsof -t -i
-t选项输出进程的PID,你可以将它和-i选项组合输出使用某个端口的进程的PID,下面的命令将会杀掉所有使用网络的进程:
# kill -9 `lsof -t -i`
循环列出文件
# lsof -r 1
-r选项让lsof可以循环列出文件直到被中断,参数1的意思是每秒钟重复打印一次,这个选项最好同某个范围比较小的查询组合使用,比如用来监测网络活动:# lsof -r 1 -u john -i -a
查看包含指定IP的进程的当前运行状况
lsof -I @912.168.0.77
如何安装lsof?
许多Unix系统都内置了lsof,如果你的系统没有安装,你可以从这里直接下载源代码。
BSD系统有一个类似的工具可以做同样的事情,叫做fstat。
你可以通过man lsof来了解关于lsof的完整文档,或者通过lsof -h查看。
开始体验lsof的乐趣吧!
===========================================
http://www.verydemo.com/demo_c167_i6451.html
http://blog.csdn.net/21aspnet/article/details/5774251
http://blog.csdn.net/adcxf/article/details/6444558