• Unix 系统管理员的 n 种武器


    原文链接

    先从性能检查小工具着手

    查看系统负载摘要 - w, top, free(linux)
    准实时更新的系统负载摘要 - top, vmstat, iostat
    进程查看 - top, ps, lsof
    进程跟踪 - strace (truss), ltrace
    网络连接情况 - netstat, lsof
    文件打开情况 - lsof, fuser

    Linux下万金油 - ls, cat (with /proc)
    查看历史 - sar

    以下是一些小 tip
    1. Linux 下多数人会使用 netstat -ant |wc -l 或 netstat netstat -ant|grep EST |wc -l 这样的命令来查看当前连接的摘要情况。netstat 扫描很费时间,快速、准确、在系统反应慢的时候尤其有利的方法
    # cat /proc/net/sockstat

    2. 查看当前系统负载最简单的命令是 w,这个命令在高负载,系统反应慢的情况下最可靠

    3. strace -p 很强大,没有日志的情况下,它可以用来了解进程究竟在做什么

    4. lsof 也很强大,lsof -n -i TCP:80 和 netstat -natp |grep :80 的效果基本相同,但揭示出额外的东西

    5. top 不会排序,就不算会用,常用的排序是按内存用量排序和CPU使用时间排序,分别是按 M 和 P。按 s 可以改变更新间隔。按 h 可以看帮助。
    转自校内王剑的日志
    Unix 系统管理员的 n 种武器 (1)这些工具的使用顺序应该是这样的
    1. 首先,看一下系统摘要,结合系统的用途,作出调查方向的初步判断。系统用途可以用 ps 看一下完整的进程列表;
    2. 确定方向后,使用工具查看具体的问题;
    3. 使用工具查找引起该具体问题的原因;

    经验多了以后,第二步有时候可以省去,但注意可能会误入歧途。

    更新:有些是 linux specific 的,注明一下
    Unix 系统管理员的 n 种武器 (2)网络相关的工具

    网络连接情况 - netstat, lsof
    路由表 - route, ip(linux), netstat
    查看和配置网络接口 - ifconfig, ip(linux)
    网卡设备配置 - ethtool & mii-tool (linux)
    网络链路质量检查 - ping, mtr, traceroute
    网络包检查 - tcpdump, wireshark
    流量监控 - iftop, iptraf, jnettop
    万用TCP连接测试工具 - telnet, netcat (nc), openssl s_client
    流量管理和控制 - tc (linux)
    防火墙设置 - iptables(linux)
    DNS查询工具 - host, nslookup, dig


    Linux 下的万金油 - cat, echo (with /proc)
    查看历史 - sar

    下面是一些小 tip
    1. netstat 的 -p 参数很有用,它可以显示 socket 对应的程序的 pid 和 程序名,我常常使用 netstat -ntlp 和 netstat -nulp 来检查守护进程

    2. 检查路由表,netstat -nr 和 route -n 是差不多的,不过列有些差别。有些系统上 route 命令不能用来查看路由表,必须用 netstat -r。Linux 上,route -ne 等于 netstat -nr

    3. ip 是个强大的命令,它可以用来检查和配置接口 IP 地址、检查和配置路由
    ip addr ...
    ip route ...
    Linux的高级路由功能必须用 ip 命令来实现 (ip rule + ip route)

    4. telnet 除了连接 telnet 服务外,还可以创建一个 tcp 连接并和服务器交互,这个功能和 netcat 相同。openssl s_client -connect server:port 用于建立 SSL 连接(耶,你可以和 https 服务交互)

    5. tc 一般用来对流量进行优先级划分或做流量限制。在测试中可以用 tc qdisc change dev eth0 root netem ...... 来模拟网络延时和丢包等情况。在 10ms 延时和 0ms 延时的情况下,系统负载能力有质的区别。

    6. 谨慎使用 iptables。除非你正在配置一个防火墙,否则能不用就不用。在一个大的服务器群里,一个没做公开记录的 iptables 规则很可能造成大的损失,外带人力浪费

    7. mtr 比 traceroute 好

    8. 检查网络问题时,ping -f 可能比 ping 好:ping 不丢包,而 ping -f 才显示出问题

    9. 多数网络相关命令都带有 -n 参数(lsof 也有),禁用反向域名查询。反向域名查询很多时候会引起问题,诸如"tcpdump 为什么抓不到包","ping 怎么死了",而且很慢。用 -n 应该是下意识的,不需要别人提醒你,不过 mtr 例外,它的反向域名查询是异步的

    10. tcpdump 必须熟悉,如果还没把 tcpdump 的 man page 通读一遍,赶紧的

    11. 网线问题是你经常想不到但必须想的。ethtool 和 mii-tool 可以帮助你了解当前网线的连接状态。ethtool 还用于配置一些网卡驱动的参数,例如 TSO (Tcp segmentation offload),链路速度。强制设置网卡链路速率能解决问题,但更多的是引起问题,如难以解释的丢包。

    12. sar -n XXX 可以用来了解历史

    13. DNS 查询问题可能会引起一些看起来是网络问题的问题,例如浏览器慢,mysql 数据库慢(如果没关反向查询)

    网络故障诊断一般是这样的顺序
    1. 网络是否中断 (ping)
    2. 是否丢包 (ping, ping -f, mtr)
    3.1 路由是否正确 (route -n, ip route 等)
    3.2 网线状态 (ethtool)
    3.3 tcpdump 或者 ifconfig 看看收发包的情况,比如异常流量(大量 icmp,arp,udp)
    3.4 arp 表
    3.5 iptables 规则
    3.6 dns

    在一些软件配置上(如 lvs),要仔细检查路由和 arp。
    Unix 系统管理员的 n 种武器 (3)再来看看文件、文件系统相关的命令

    文件系统的挂载 - mount, umount
    文件系统检查 - fsck
    检查文件状态 - stat, ls
    检查打开的文件 - fuser, lsof
    空间检查 - df, du
    查找文件 - find, locate, grep
    文件权限 - chown, chmod, (linux) lsattr, chattr, getacl, setacl
    特殊文件 - mknod, mkfifo, mkdir, rmdir
    常用的压缩、归档工具 - tar, cpio, gzip, bzip2, 7zip, unzip, unrar

    Linux 下万金油 - cat, ls (with /proc)

    下面是一些小 tip
    1. mount 的 noatime 选项需要特别留意。在打开文件时,系统默认会更新文件的 access time 时戳,如果对文件的访问模式是快速打开、关闭大量不同的文件,例如某些搜索应用、news 服务器等,即便应用是只读的,对 access time 的更新会引起可观的磁盘写入操作。noatime 关闭对 access time 的更新;

    2. mount -o remount 在不卸载文件系统的情况下重新设置挂载选项,比如 mount -o remount,noatime /some_mnt_point。在 nfs 服务器宕机,进程僵死的情况下,可以用 remount 来修改 nfs 挂载选项 (mount -o remount,intr),使得进程可以被杀死

    3. 对挂载上的文件系统进行写模式的 fsck 会造成文件系统损坏

    4. du 一个目录,但不希望包括其子目录上的挂载的文件系统时,可以用 -x 来避免跨文件系统。find 是 -xdev;gnu tar 是 --one-file-system

    5. 有时候,在文件被打开的情况下删除文件,会造成"隐藏"的空间占用,df 可以看见空间没了,可是 du 检查的结果是空间还有很多富余,这个时候,可以用 lsof /path 来检查,例如
    # lsof /tmp
    COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
    apache2 7184 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    apache2 15216 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    apache2 15313 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    apache2 16041 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    apache2 22031 root 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    apache2 22778 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    apache2 22781 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    mysqld 29107 mysql 5u REG 8,8 0 12 /tmp/ibuA28pF (deleted)
    mysqld 29107 mysql 6u REG 8,8 0 13 /tmp/ibpTXuPw (deleted)
    mysqld 29107 mysql 7u REG 8,8 0 14 /tmp/ibQLeReo (deleted)
    mysqld 29107 mysql 8u REG 8,8 0 15 /tmp/ibNTdyEf (deleted)
    mysqld 29107 mysql 12u REG 8,8 0 16 /tmp/ib6kde56 (deleted)
    apache2 32516 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    apache2 32517 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    apache2 32558 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
    apache2 32560 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)

    6.空间有富余,权限也正确但无法写入,可能是文件系统的 inode 用完了,用 df -i 检查。和 inode 有关的参数,ls 是 -i,find 是 -inum

    7. Linux 下,当你没有 lsof 可以用的时候,学会用 ls -l /proc/<pid>/fd/。上面的 lsof 例子可以写成
    # ls -l /proc/*/fd |grep /tmp

    8. find 不仅仅能按文件名搜索,它还可以按类型-type、时戳 -atime/-ctime/-mtime、比较时戳 -newer、权限 -perm、大小 -size、所有者 -uid/-user 等条件来找文件

    9. locate 很好用,但它依赖于 updatedb 生成的数据库,有些情况下,需要限制 updatedb 索引的文件系统范围。这时,要了解 locate 的局限性

    10. 要理解,权限不止 wrx 这三个属性

    11. bzip2 压缩率比 gzip 好,但对于上 G 的文件,速度过分慢

  • 相关阅读:
    使用 Dockerfile 自定义 Nginx 镜像
    Windows下Rancher复制Pod内文件到本地
    SSL基础知识及Nginx/Tomcat配置SSL
    linux内核源码
    strace:跟踪进程的系统调用 、ltrace:跟踪进程调用库函数,runlevel & init & service
    C10K,C10M问题
    操作系统
    深入理解GOT表和PLT表
    为什么 List<Struct> 在 C# 中的分配速度比 List<Class> 快 15 倍
    如何计算时间复杂度
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2535095.html
Copyright © 2020-2023  润新知