image.png

命令行

连通性

  1. curl ip.cn
  2. curl ipinfo.io
  3. curl -s attacker.club/getip #查看出口ip
  4. ping 114.114.114.114 |awk '{print $0"\t" strftime("%H:%M:%S",systime())}'
  5. # 连续ping检测

系统基础命令

  1. top --> m #内存
  2. top --> 1 #cpu
  3. top -Hp pid # 看具体线程负载
  4. pstree -ap # 查看详细进程列表
  5. uptime --> #负载
  6. dstat -ndy --top-mem
  7. dstat -ndy --top-cpu
  8. dstat -ndy --top-io
  9. dstat -ndy --top-mem --top-cpu --top-io -t
  10. #查看关键性能io

system:int、csw

系统级IO监控

  1. iostat -xdm1
  2. # %util代表磁盘繁忙程度。100% 表示磁盘繁忙, 0%表示磁盘空闲
  3. # argrq-sz 提交给驱动层的IO请求大小,一般不小于4K,可判断io模式越大代表顺序,越小代表随机

进程级IO监控

  1. iotop
  2. pidstat -d 1
  3. # 展示I/O统计,每秒更新一次( sysstat rpm包)

网站页面响应

  1. curl -o /dev/null -s -w %{time_namelookup}:%{time_connect}:%{time_starttransfer}:%{time_total} http://www.baidu.com
  2. # 0.004:0.031:0.269:0.269
  3. # 解析 建立连接 传输 总

系统并发连接查看

  1. netstat -an | awk '/^tcp/ {print $6}'|sort |uniq -c|sort -n
  2. ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}'
  3. #查看当前TCP连接状态;ss更快
  4. ss -an|awk '{print $5}'|awk -F: '{print $1}'|sort|egrep -o '[0-9]{1,3}(\.[0-9]{1,3}){3}'|uniq -c|sort -nr|head -n 10
  5. #查看并发最多的独立IP,取其前10个;sort排序 参数nr中n是按照排序大小,r是反向排序。uniq -c计数显示
  6. netstat -n|grep TIME_WAIT|awk '{print $5}'|awk -F: '{print $1}' |sort|uniq -c|sort -rn|head -n5
  7. #查看后端TIME_WAIT主机
  8. tail -1000 /var/log/httpd/access_log |awk '{print $NF}'|sort |uniq -c|sort -n
  9. #sort -k1n,k1是第一列;列出1000行域名出现次数

web访问统计

  1. watch 'netstat -an | egrep -w "80|443"|grep ESTABLISHED |wc -l'
  2. # 服务并发连接
  3. awk '$4 >="[04/Apr/2017:12:25:00" && $4 <="[04/Apr/2017:12:26:00"' blog.log
  4. #过滤第四列的项,输出大于等于25分,小于等于26分的访问日志

故障定位

网络抓包

  1. tcpdump -n host [目标IP]
  2. # -n 是显示IP和端口,也就是不解析主机名
  3. tcpdump -i eth0 host 43.225.180.226 tcp port 8888 -vv -c 3 -w result.pcap #-vv 屏幕显示 -c 抓包次数 -w 写入数据到本地
  4. tcpdump -Z root -r src.pcap "tcp port 22 and (tcp[tcpflags] & tcp-fin != 0)" -w dst.pcap #过滤出端口为22, 且含有 FIN 标记的数据包
  5. tcpdump -i eth0 -s 0 -l -w out.log port 3306 | strings #在数据库服务器是通过tcpdump抓sql语句

OOM

全称“Out Of Memory”;内存用完了

  1. 内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。
  2. 内存溢出:申请的内存超出了JVM能提供的内存大小,此时称之为溢出。
  1. grep "Out of memory" /var/log/messages
  2. grep -ir 'killed process' /var/log
  3. dmesg |grep "Out of memory"
  1. jmap -heap java_pid #java查看资源使用

快速查看磁盘满了inode 100%

  1. df -i
  2. # 查看inode使用情况
  3. for i in /home/*; do echo $i; find $i | wc -l; done
  4. # 指定路径查看inode信息
  5. for i in `ls -1A | grep -v "\.\./" | grep -v "\./"`; do echo "`find $i | sort -u | wc -l` $i"; done | sort -rn | head -5
  6. # 在当前目录,层层查看inode数量

文件或文件夹过多无法删除问题

  1. cd del_dir
  2. time perl -e 'for(<*>){((stat)<(unlink))}' # 删除目录下所有文件
  3. mkdir null
  4. time rsync -a --delete null/ del_dir # 同步方式清空文件和文件夹

卡住问题

主机上有挂载NFS,du -h时卡住

  1. strace df -h
  2. #查看卡在哪个位置;如果是nfs共享umount掉。
  3. mount |grep misc
  4. #查看是否有mount
  5. systemctl restart proc-sys-fs-binfmt_misc.automount
  6. # 重启mount点

yum 安装失败卡住

  1. rm -f /var/lib/rpm/__db.00*
  2. # 删除rpm数据文件
  3. rpm -vv --rebuilddb
  4. # 重建rpm数据文件
  5. yum clean all
  6. yum makecache
  7. # 清空缓存后再重新缓存

强制重启

  1. echo 1 > /proc/sys/kernel/sysrq
  2. echo b > /proc/sysrq-trigger
  3. reboot -nf
  4. # 重启时可以指定跳过 init 的处理和 sync 操作,这样可以避免大多数情况下的问题。