Linux主要性能指标说明
发布时间:2023-02-20 10:11:42 所属栏目:Linux 来源:互联网
导读:一台 Linux 服务器的四类指标如下: cpu:使用率、平均负载(load average) RAM:used | free | buffer/cache | avaliable disk:空闲容量大
和 IO 指标类似,网络指标主要有: socket 连接 连接数存在上限,该上限与 Linux 的文件描述符上限等参数有关。 广为人知的 DDOS 攻击,通过 TCP 连接的 ACK 洪泛来使服务器瘫痪,针对的就是 TCP 协议的一个弱点。 网络带宽(吞吐量) PPS(Packets Per Second) 数据包的收发速率 网络延迟:一般通过 ping 来确定网络延迟和丢包率 丢包率等等 DNS 解析 客户端与服务器之间的整条网络链路的任何一部分出现故障或配置不当,都可能导致上述的监控参数异常,应用无法正常运行。典型的如交换机、负载均衡器、Kubernetes 配置、Linux 系统参数(sysctl/ulimit)配置不当等。 1. 网络带宽监控 nethogs: 每个进程的带宽监控,并且进程是按带宽排序的 使用:sudo nethogs 快速分析出占用大量带宽的进程 tcpdump/tshark/mitmproxy: 命令行的网络抓包工具,mitmproxy 提供 Web UI 界面,而 tshark 是 wireshark 的命令行版本。 tcpdump -i eth0 -w dump.pcap: 使用 tcpdump 抓 eth0 的数据包,保存到 dump.pcap 中。之后可以通过 scp/ssh 等命令将该 pcap 文件拷贝下来,使用 wireshark 进行分析。 2. Socket Socket 的状态查看方法: # 查看 socket 连接的统计信息 # 主要统计处于各种状态的 tcp sockets 数量,以及其他 sockets 的统计信息 ss --summary ss -s # 缩写 # 查看哪个进程在监听 80 端口 # --listening 列出所有正在被监听的 socket # --processes 显示出每个 socket 对应的 process 名称和 pid # --numeric 直接打印数字端口号(不解析协议名称) ss --listening --processes --numeric | grep 80 ss -nlp | grep 80 # 缩写 ss -lp | grep http # 解析协议名称,然后通过协议名搜索监听 ## 使用过时的 netstat ### -t tcp ### -u udp netstat -tunlp | grep ":80" # 查看 sshd 当前使用的端口号 ss --listening --processes | grep sshd ## 使用过时的 netstat netstat -tunlp | grep <pid> # pid 通过 ps 命令获得 # 列出所有的 tcp sockets,包括所有的 socket 状态 ss --tcp --all # 只列出正在 listen 的 socket ss --listening # 列出所有 ESTABLISHED 的 socket(默认行为) ss # 统计 TCP 连接数 ss | grep ESTAB | wc -l # 列出所有 ESTABLISHED 的 socket,并且给出连接的计时器 ss --options # 查看所有来自 192.168.5 的 sockets ss dst 192.168.1.5 # 查看本机与服务器 192.168.1.100 建立的 sockets ss src 192.168.1.5 # 查看路由表 routel 3. 网络延迟、丢包率 通过 ping 命令进行测试,使用 pathping (仅 Windows)进行分段网络延迟与丢包率测试。 4. DNS故障排查 dig +trace baidu.com # 诊断 dns 的主要工具,非常强大 host -a baidu.com # host 基本就是 dig 的弱化版,不过 host 有个有点就是能打印出它测试过的所有 FQDN nslookup baidu.com # 和 host 没啥大差别,多个交互式查询不过一般用不到 whois baidu.com # 查询域名注册信息,内网诊断用不到 TCP 连接数受 Linux 文件描述符上限控制,可以通过如下方法查看已用文件句柄的数量。 # 已用文件描述符数量 lsof | wc -l # 文件描述符上限 ulimit -n Docker 容器有自己的 namespace,直接通过宿主机的 ss 命令是查看不到容器的 socket 信息的。 比较直观的方法是直接通过 docker exec 在容器中通过 ss 命令。但是这要求容器中必须自带 ss 等程序,有的精简镜像可能不会自带它。 因此用的更多的方法,有两种: 1. 通过 nsenter 直接在目标容器的 namespace 中使用宿主机的命令。 这个适合单机 docker 的网络诊断,用法如下: # 1. 查询到容器对应的 pid PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>) # 2. nsenter 通过 pid 进入容器的 network namespace,执行 ss 查看 socket 信息 nsenter --target $PID --net ss -s nsenter 这个工具貌似是 docker 自带的,只要装了 docker,ubuntu/centos 都可以直接使用这个命令。 2. 使用专用的网络诊断镜像进行容器网络诊断(SideCar) 这种方式一般用于容器集群的诊断,K8s 社区提供了一个工具 kubectl-debug,以这种 SideCar 的方式进行容器诊断。 (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |