监控磁盘状态io 因为磁盘的io也是非常重要的指标。有时cpu,内存有剩余就是负载很高。Vmstat发现b或者wa列数据比较大。说明磁盘有瓶颈。 iostat命令在安装sysstat包时已经安装上了,和sar同包 iostat -x 磁盘使用 [root@localhost ~]# iostat -x Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 2017年11月24日 x86_64 (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle 0.10 0.00 0.40 0.22 0.00 99.29
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.23 0.01 1.95 1.73 34.32 2.24 19.91 0.02 4.29 4.71 3.82 2.35 0.86 scd0 0.00 0.00 0.00 0.00 0.02 0.00 8.00 0.00 17.45 17.45 0.00 17.45 0.01 %util:表示IO等待时间比。如果占用50%,rKB、wKB不大,%util大磁盘可能存在故障
磁盘很忙是哪个进程在读写呢? iotop 磁盘使用 yum install -y iotop
10.7 free命令 free 查看内存使用情况 free -m / -g / -h查看内存总大小和使用情况
内存 内存总大小 已用大小 未使用大小 共享大小 缓冲缓存 交换分区 总大小 已用大小 未使用大小
buffer/cache区别 公式:total=used+free+buff/cache avaliable包含free和buffer/cache剩余部分
buffers:缓冲
cached:缓存
Swap用完要加swap不是解决的办法,应该加内存。 内存不够(内存泄漏)要检查程序。 10.8 ps(pstree) 是一种静态的。把当前的状态显示出来 ps 查看系统进程 用法: ps aux、ps -elf //列出系统全部进程 STAT 部分说明 D 不能中断的进程(对程序有影响的。影响系统负载) R run 状态的进程 S sleep 状态的进程 T 暂停的进程(运行的进程被ctrl+z) Z 僵尸进程 < 高优先级进程 N 低优先级进程 L 内存中被锁了内存分页 s 主进程(父进程守护进程) l 多线程进程 + 前台进程
[root@lsx-02 ~]# ps -aux|grep nginx //查看进程是否在运行
[root@lsx-02 ~]# ps -aux|grep qmgr postfix 1872 0.0 0.0 91908 52 ? S 9月15 0:00 qmgr -l -t unix -u root 12359 0.0 0.1 112672 984 pts/0 R+ 00:24 0:00 grep --color=auto qmgr [root@lsx-02 ~]# kill 1872 ////杀死进程(不合理进程网站搜索下。合理的不能杀死,可以考虑加内存或者建立集群) [root@lsx-02 ~]# ps -aux|grep qmgr root 12361 0.0 0.1 112672 984 pts/0 R+ 00:24 0:00 grep --color=auto qmgr
背景:当系统被黑了,看到不知道的进程,想看看进程在哪呢?把进程杀掉,找到pid [root@lsx-02 ~]# ls -l /proc/1111/ 1111是进程号 可以查看一个进程从哪里启动起来的
[root@lsx-02 ~]# ps –aux 使用者 进程号 Cpu百分比 内存百分比 虚拟内存 物理内存 Tty终端 状态 什么时候启动的 运行多久 进程名字
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.7 50036 4364 ? Ss 9月15 0:06 /usr/lib/ root 2 0.0 0.0 0 0 ? S 9月15 0:00 [kthreadd root 3 0.0 0.0 0 0 ? S 9月15 0:04 [ksoftirq
父进程是root启动的 有一个小s主进程(守护进程) 子进程是www启动的
进程有多个线程,线程使用进程相同的内存区域
ps -le
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 12695 ep_pol ? 00:00:03 systemd
1 S 0 2 0 0 80 0 - 0 kthrea ?
10.9 netstat 查看网络状态
Linux作为服务器的操作系统,会有很多的服务,服务通常和客户端相互通信的。意味着它有对外的监听端口。安装一个服务就要监听一个端口,要想其他人访问就要打开一个端口,远程设备与这个端口相连,相互通信。
netstat 查看tcp/ip网络状态
[root@lsx-02 ~]# yum install -y net-tools
netstat -lnp 查看监听端口
[root@lsx-02 ~]# netstat –lnp -l 监听
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1788/master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1111/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1788/master
tcp6 0 0 :::22 :::* LISTEN 1111/sshd
udp 0 0 0.0.0.0:46708 0.0.0.0:* 504/avahi-daemon: r
udp 0 0 0.0.0.0:5353 0.0.0.0:* 504/avahi-daemon: r
raw6 0 0 :::58 :::* 7 619/NetworkManager
Linux的socket文件也是进程之间通信的(在同一台服务器,两进程之间相互通信)
unix 3 [ ] STREAM CONNECTED 18212
unix 2 [ ] DGRAM 15809
unix 3 [ ] STREAM CONNECTED 14480
unix 3 [ ] STREAM CONNECTED 17050
netstat -lntp 只看出tcp的,不包含socket netstat -an 查看系统的网络连接状况 [root@lsx-02 ~]# netstat –an 查看所有的连接状态 连接状态有LISTENING、ESTABLISHED、TIME_WAIT、FIN_WAIT2、CLOSING TIME_WAIT就是客户端与服务器端相互通信,通信完成之后连接还没断开处于一种等待的状态,等待下次两机器在一次连接传输数据。
tcp/ip三次握手
ss -an 和nestat异曲同工 ss -an|grep listen -i 分享一个小技巧: netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}' //各种连接状态次数 ESTABLISHED表示建立连接正在传输数据的。数越大系统越忙 (在通信)1000以内可以接受(网站并发连接数(同一时间有多少客户端连接)ESTABLISHED的数就可以说明并发连接数有多少)
抓包工具 抓包工具tcpdump 在讲解sar那节,可能遇到攻击网卡流量异常,记录的包可能超过一万,可能想知道有哪些包进来
yum install -y tcpdump 用法:tcpdump -nn
-i 指定监听的网络接口。 -nn 不进行端口名称的转换。 tcpdump -nn -i ens33 // -nn 如果不加会显示主机名(加显示ip端口号) 看的是流向,和length。length默认很多都是tcp,可能看到udp的包,udp的包很有可能你被攻击了(DDos udp flood)。1G的DDos可能一个小机房都受不了,只能借助专业的防攻击设备、服务(创宇300G应该没问题)
tcpdump -nn port 80 //指定端口 tcpdump -nn not port 22 and host 192.168.0.100 //不要22端口和只要host指定ip的包
-c 在收到指定的数量的分组后,tcpdump就会停止。 写脚本抓数据包 tcpdump -nn -c 100 -w 1.cap // -w指定要存的文件数据包(这步后台运行或者在开一个终端运行)。是从网卡抓出来的文件,通信的内容 tcpdump -r /tmp/01tcp.txt //看文件的内容 -r 读
yum install -y wireshark //tcpdump类似的工具 tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" //指定80端口web的访问情况,类似web访问日志