1. w 查看系统的负载
[root@dong-Linux ~]# w 15:50:55 up 21 min, 2 users, load average: 0.00, 0.26, 0.74 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT dong tty1 :0 15:33 20:52 16.33s 0.20s pam: gdm-passwo root pts/0 192.168.18.1 15:36 0.00s 0.28s 0.01s w
上面第一行的数据显示的信息从左到右分别是:系统时间,系统已运行时间,当前登陆的用户数,系统1min,5min,15min的平均负载,
第二行是:当前有哪些用户,从哪种方式登陆的,登陆地址,IDLE:空闲了多长时间,JCPU:该终端(tty)连接的所有进程占用的时间,PCPU:当前进程所占用的时间,WHAT:正在运行进程的命令行
2.vmstat 监控系统的状态
[root@dong-Linux ~]# vmstat 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 1744 89532 8320 238060 0 1 225 77 710 954 1 3 86 9 0
上面的w只是能知道系统有没有压力,但是具体是哪些参数(CPU,内存,磁盘等)有压力呢,这个就需要vmstat了。
1)procs 显示进程相关信息
r :表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;
b :表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;
2)memory 内存相关信息
swpd :表示切换到交换分区中的内存数量 ;
free :当前空闲的内存数量;
buff :缓冲大小,(即将写入磁盘的);
cache :缓存大小,(从磁盘中读取的);
3)swap 内存交换情况
si :由交换区写入到内存的数据量;
so :由内存写入到交换区的数据量;
4)io 磁盘使用情况
bi :从块设备读取数据的量(读磁盘);
bo: 从块设备写入数据的量(写磁盘);
5)system 显示采集间隔内发生的中断次数
in :表示在某一时间间隔中观测到的每秒设备中断数;
cs :表示每秒产生的上下文切换次数;
6)CPU 显示cpu的使用状态
us :显示了用户下所花费 cpu 时间的百分比;
sy :显示系统花费cpu时间百分比;
id :表示cpu处于空闲状态的时间百分比;
wa :表示I/O等待所占用cpu时间百分比;
st :表示被偷走的cpu所占百分比(一般都为0,不用关注);
以上所介绍的各个参数中,重点关注经r列,b列,和wa列,三列代表的含义在上边说得已经很清楚。IO部分的bi以及bo也是要经常参考的对象。如果磁盘io压力很大时,这两列的数值会比较高。另外当si, so两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。
3.top 显示进程所占系统的资源
top - 16:09:03 up 39 min, 2 users, load average: 0.00, 0.05, 0.28 Tasks: 158 total, 1 running, 157 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 510784k total, 421872k used, 88912k free, 8416k buffers Swap: 1048568k total, 1744k used, 1046824k free, 238332k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1268 root 20 0 38864 3252 2972 S 0.7 0.6 0:14.80 vmtoolsd 2757 root 20 0 2704 1144 880 R 0.7 0.2 0:00.10 top 2457 dong 20 0 74540 21m 16m S 0.3 4.3 0:24.49 vmtoolsd 1 root 20 0 2900 1244 1104 S 0.0 0.2 0:01.49 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 6 root RT 0 0 0 0 S 0.0 0.0 0:16.50 watchdog/0 7 root 20 0 0 0 0 S 0.0 0.0 0:01.43 events/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm 13 root 20 0 0 0 0 S 0.0 0.0 0:00.02 sync_supers ················//下面省略
这个命令能动态打印系统进程所占的资源的情况,默认是没隔3秒钟打印一次,这个命令显示的内容非常丰富,包括系统负载,进程数,cpu和内存的使用情况等,在最后,列出某个进程的详细信息,可以关注我们自己想要关注的信息
4.sar 监控系统状态
[root@dong-Linux ~]# sar Linux 2.6.32-431.el6.i686 (dong-Linux) 2015年08月27日 _i686_ (1 CPU) 15时30分20秒 LINUX RESTART 15时40分02秒 CPU %user %nice %system %iowait %steal %idle 15时50分01秒 all 0.59 0.00 3.38 1.38 0.00 94.65 16时00分02秒 all 1.55 0.00 1.35 2.56 0.00 94.54 16时10分01秒 all 0.10 0.00 0.20 0.18 0.00 99.51 平均时间: all 0.74 0.00 1.59 1.36 0.00 96.31
sar这个命令很强大,可以监控到所有的资源状态,包括负载,网卡流量,磁盘状态,内存使用等,它不仅可以记录当前的资源状态情况,还有历史情况,它的数据记录在/var/log/sa/下面,你可以查看历史的情况,默认只记录一个月的情况,这个命令太强大,列举几个常用的
[root@dong-Linux ~]# sar -n DEV Linux 2.6.32-431.el6.i686 (dong-Linux) 2015年08月27日 _i686_ (1 CPU) 15时30分20秒 LINUX RESTART 15时40分02秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 15时50分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 15时50分01秒 eth0 672.12 671.70 100.19 63.08 0.00 0.00 0.00 16时00分02秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时00分02秒 eth0 15.51 10.33 19.59 0.55 0.00 0.00 0.00 16时10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时10分01秒 eth0 0.15 0.17 0.02 0.12 0.00 0.00 0.00 平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: eth0 216.71 214.84 38.12 20.07 0.00 0.00 0.00
IFACE表示设备名称,rxpck/s 表示每秒进入收取的包的数量,txpck/s 表示每秒发送出去的包的数量,rxbyt/s 表示每秒收取的数据量(单位Byte),txbyt/s表示每秒发送的数据量。如果有一天您所管理的服务器丢包非常严重,那么您就应该看一看这个网卡流量是否异常了,如果rxpck/s 那一列的数值大于4000,或者rxbyt/s那列大于5,000,000则很有可能是被攻击了,正常的服务器网卡流量不会高于这么多,除非是您自己在拷贝数据。上面的命令是查看网卡流量历史的,如何时时查看网卡流量呢?
[root@dong-Linux ~]# sar -n DEV 1 5 Linux 2.6.32-431.el6.i686 (dong-Linux) 2015年08月27日 _i686_ (1 CPU) 16时23分28秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时23分29秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时23分29秒 eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时23分29秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时23分30秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时23分30秒 eth0 1.01 1.01 0.06 0.40 0.00 0.00 0.00 16时23分30秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时23分31秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时23分31秒 eth0 1.00 1.00 0.06 0.40 0.00 0.00 0.00 16时23分31秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时23分32秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时23分32秒 eth0 1.01 1.01 0.06 0.40 0.00 0.00 0.00 16时23分32秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 16时23分33秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16时23分33秒 eth0 1.01 1.01 0.06 0.40 0.00 0.00 0.00 平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 平均时间: eth0 0.80 0.80 0.05 0.32 0.00 0.00 0.00
查看历史流量信息
[root@dong-Linux ~]# sar -n DEV -f /var/log/sa/sa sa21 sa22 sa23 sa24 sa25 sa26 sa27 sa28 sa30 sar21 sar22 [root@dong-Linux ~]# sar -n DEV -f /var/log/sa/sa21 Linux 2.6.32-431.el6.i686 (dong-Linux) 2015年08月21日 _i686_ (1 CPU) 10时50分00秒 LINUX RESTART 11时00分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 11时10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11时10分01秒 eth0 8.88 5.50 11.27 0.29 0.00 0.00 0.00 11时20分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11时20分01秒 eth0 0.14 0.10 0.01 0.01 0.00 0.00 0.00 11时30分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11时30分01秒 eth0 166.93 55.32 212.27 3.34 0.00 0.00 0.00 11时40分02秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11时40分02秒 eth0 5.56 3.00 6.94 0.17 0.00 0.00 0.00 ..............
查看历史负载 sar -q
[root@dong-Linux ~]# sar -q Linux 2.6.32-431.el6.i686 (dong-Linux) 2015年08月27日 _i686_ (1 CPU) 15时30分20秒 LINUX RESTART 15时40分02秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 15时50分01秒 0 253 0.01 0.31 0.79 16时00分02秒 0 252 1.06 0.36 0.54 16时10分01秒 0 254 0.00 0.04 0.26 16时20分01秒 0 253 0.00 0.00 0.12 平均时间: 0 253 0.27 0.18 0.43
5.free 查看内存使用情况
[root@dong-Linux ~]# free total used free shared buffers cached Mem: 510784 422484 88300 0 9004 238504 -/+ buffers/cache: 174976 335808 Swap: 1048568 1744 1046824
上面分别表示内存总来能够,已经使用量,空闲量,后面是共享的空间,缓存和cache等,另外用-m -g用单位表示这些信息
6.ps查看系统进程
windows可以打开任务管理器查看有哪些程序在运行,linux下用ps这个命令就可以了,价格参数ps aux
[root@dong-Linux ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 2900 1244 ? Ss 15:29 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S 15:29 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 15:29 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S 15:29 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S 15:29 0:00 [migration/0] root 6 0.4 0.0 0 0 ? S 15:29 0:16 [watchdog/0] root 7 0.0 0.0 0 0 ? S 15:29 0:01 [events/0] root 8 0.0 0.0 0 0 ? S 15:29 0:00 [cgroup] root 9 0.0 0.0 0 0 ? S 15:29 0:00 [khelper] root 10 0.0 0.0 0 0 ? S 15:29 0:00 [netns] root 11 0.0 0.0 0 0 ? S 15:29 0:00 [async/mgr] root 12 0.0 0.0 0 0 ? S 15:29 0:00 [pm] root 13 0.0 0.0 0 0 ? S 15:29 0:00 [sync_supers] root 14 0.0 0.0 0 0 ? S 15:29 0:00 [bdi-default] root 15 0.0 0.0 0 0 ? S 15:29 0:00 [kintegrityd/0] root 16 0.0 0.0 0 0 ? S 15:29 0:02 [kblockd/0] root 17 0.0 0.0 0 0 ? S 15:29 0:00 [kacpid] root 18 0.0 0.0 0 0 ? S 15:29 0:00 [kacpi_notify .................
下面是一些参数的介绍
PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill 进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid
STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)
D 不能中断的进程(通常为IO)
R 正在运行中的进程
S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态
T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态
W 这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配
X 已经死掉的进程(这个好像从来不会出现)
Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。
< 高优先级进程
N 低优先级进程
L 在内存中被锁了内存分页
s 主进程
l 多线程进程
+ 代表在前台运行的进程
7.netstat查看网络状态
[root@dong-Linux ~]# netstat -lnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1986/mysqld tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2654/smbd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1755/nginx tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1801/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1658/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2060/master tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 2654/smbd tcp 0 0 :::139 :::* LISTEN 2654/smbd tcp 0 0 :::22 :::* LISTEN 1801/sshd tcp 0 0 ::1:631 :::* LISTEN 1658/cupsd tcp 0 0 ::1:25 :::* LISTEN 2060/master tcp 0 0 :::445 :::* LISTEN 2654/smbd udp 0 0 0.0.0.0:68 0.0.0.0:* 1655/dhclient udp 0 0 0.0.0.0:631 0.0.0.0:* 1658/cupsd Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 9860 1624/dbus-daemon /var/run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 14333 2420/pulseaudio /tmp/.esd-500/socket unix 2 [ ACC ] STREAM LISTENING 14336 2420/pulseaudio /home/dong/.pulse/511df0c962ff75dee38a787d00000024-runtime/native
netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息,经常配合grep命令查看相应的端口是否开启。
tcpdump 抓包工具
有时想查看哪个网卡上都有哪些数据包,尤其是判断服务器上的流量攻击,就需要用转包工具了
[root@dong-Linux ~]# tcpdump -nn -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 16:46:01.118993 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 149208610:149208818, ack 621382697, win 675, length 208 16:46:01.119450 IP 192.168.18.1.57395 > 192.168.18.129.22: Flags [.], ack 208, win 16313, length 0 16:46:01.120777 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 208:496, ack 1, win 675, length 288 16:46:01.122078 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 496:672, ack 1, win 675, length 176 16:46:01.122369 IP 192.168.18.1.57395 > 192.168.18.129.22: Flags [.], ack 672, win 16197, length 0 16:46:01.123069 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 672:944, ack 1, win 675, length 272 16:46:01.124343 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 944:1120, ack 1, win 675, length 176 16:46:01.124607 IP 192.168.18.1.57395 > 192.168.18.129.22: Flags [.], ack 1120, win 16085, length 0 16:46:01.125790 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 1120:1392, ack 1, win 675, length 272 16:46:01.126866 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 1392:1568, ack 1, win 675, length 176 16:46:01.127321 IP 192.168.18.1.57395 > 192.168.18.129.22: Flags [.], ack 1568, win 16425, length 0 16:46:01.128115 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 1568:1840, ack 1, win 675, length 272 16:46:01.129352 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 1840:2016, ack 1, win 675, length 176 16:46:01.129607 IP 192.168.18.1.57395 > 192.168.18.129.22: Flags [.], ack 2016, win 16313, length 0 16:46:01.129814 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 2016:2288, ack 1, win 675, length 272 16:46:01.132027 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 2288:2464, ack 1, win 675, length 176 16:46:01.132305 IP 192.168.18.1.57395 > 192.168.18.129.22: Flags [.], ack 2464, win 16201, length 0 16:46:01.133073 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 2464:2736, ack 1, win 675, length 272 16:46:01.134331 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 2736:2912, ack 1, win 675, length 176 16:46:01.134616 IP 192.168.18.1.57395 > 192.168.18.129.22: Flags [.], ack 2912, win 16089, length 0 16:46:01.135647 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 2912:3184, ack 1, win 675, length 272 16:46:01.135870 IP 192.168.18.129.22 > 192.168.18.1.57395: Flags [P.], seq 3184:3360, ack 1, win 675, length 176 16:46:01.136240 IP 192.168.18.1.57395 > 192.168.18.129.22: Flags [.], ack 3360, win 16425, length 0 ····················
如果没有tcpdump 这个命令,需要用 yum install -y tcpdump 命令去安装一下。上例中第三列和第四列显示的信息为哪一个IP+port在连接哪一个IP+port,后面就是包的一些信息。
其实在windows下,也有抓包的工具,叫wireshark,用这个工具分析抓取的包非常方便,不过也是需要时间去好好研究的