最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)(一)

简介: 最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)

Linux命令相关查看指标

CPU 指标

vmstat指令

shell

复制代码

vmstat -n m

该命令用于每隔n秒采集系统的性能统计信息,共采集m次。

shell

复制代码

[root@svr01]$ vmstat 1 3
    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 206944 633564  29876 1252176    0    0    10    27    0    0  1  1 98  0  0
    0  0 206944 634232  29876 1252192    0    0     0     0  811 1504  1  1 98  0  0
    0  0 206944 634480  29876 1252264    0    0     0     0  951 1458  6  1 93  0  0

下面是对输出结果中一些字段的解释:

  • "r" 表示运行队列,即等待执行的进程数量。一般情况下,r值超过3意味着负载较高,超过5则表示负载高,超过10则说明系统负载异常。
  • "bi" 和 "bo" 通常应接近0,表示磁盘I/O的数据块接收和数据块发送的情况。如果这两个值较大,说明系统频繁进行磁盘I/O操作,可能会导致性能下降。

建议根据具体应用场景和系统需求,对这些指标进行评估和优化。如需进一步了解命令的详细用法和其他参数,请参阅相关文档或使用命令"man vmstat"获取帮助信息。

uptime指令

uptime命令用于显示系统的负载情况和运行时间,要使用uptime命令查看系统的负载情况,只需在终端中输入uptime即可。

shell

复制代码

[root@svr01]$ uptime
21:27:44 up 207 days, 11:15, 1 user, load average: 26.45, 16.76, 7.50

在输出结果中,分别表示最近1分钟、5分钟和15分钟的平均负载。

系统负载是指在某个特定时间范围内正在使用或等待CPU资源的进程数量。下面是对不同负载范围的解释:

  • 如果系统平均负载小于等于3,表示系统性能良好,可以正常运行。
  • 如果系统平均负载小于等于4,表示系统性能还可以,可以接受一些额外的负载。
  • 如果系统平均负载大于5,表示系统负载过重,可能会影响系统的性能并导致严重的问题,此时考虑扩容,例如增加CPU核心数量。

建议根据实际情况来评估系统负载和性能,如果系统负载过重且持续高于5,考虑增加计算资源,如扩容或增加处理能力。

top指令

top命令是一个常用的系统性能监控工具,用于实时查看系统的各项指标和进程的状态。在使用top命令时,您可以按下 "1" 键来查看每个 CPU 核心的详细指标。

shell

复制代码

Tasks: 332 total,   3 running, 294 sleeping,   0 stopped,  35 zombie
%Cpu0  :  6.3 us,  3.1 sy,  0.0 ni, 89.2 id,  0.0 wa,  0.0 hi,  0.3 si,  1.0 st
%Cpu1  :  6.6 us,  3.8 sy,  0.0 ni, 88.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.7 st
%Cpu2  :  7.2 us,  2.4 sy,  0.0 ni, 88.6 id,  0.3 wa,  0.0 hi,  0.0 si,  1.4 st
%Cpu3  :  8.4 us,  2.8 sy,  0.0 ni, 87.8 id,  0.0 wa,  0.0 hi,  0.0 si,  1.0 st
KiB Mem : 16418244 total,   204416 free, 14031720 used,  2182108 buff/cache
KiB Swap:  2096444 total,  2096444 free,        0 used.  1249020 avail Mem

top命令的输出中,以下是与您提到的指标相关的字段和解释:

  • us:用户空间使用CPU的百分比。
  • sy:系统空间使用CPU的百分比。
  • id:CPU空闲时间的百分比。
  • wa:等待IO完成的时间占用CPU的百分比。
  • 根据您的要求,如果us <= 70sy <= 35并且 us + sy <= 70,这说明系统的状态良好,用户和系统使用CPU的百分比都在可接受的范围内。当然,这些阈值可以根据具体需求进行调整。
  • 同时,如果id <= 70,表示CPU空闲时间较少,系统面临较大的IO压力。这可能意味着系统中有高负载的IO操作正在进行,如磁盘读写、网络传输等。需要根据实际情况来评估IO压力的影响。

注意,top命令提供了更多的系统性能指标和进程信息,您可以根据需要来进一步分析和优化系统的性能。

Memory指标

vmstat指令

vmstat指标仅提供了一些关于内存使用情况的基本信息。为了更全面地了解系统的性能和资源利用情况,您还可以考虑查看其他相关指标,如CPU使用情况、磁盘IO等。这样可以更好地评估系统的整体性能状况,从而采取相应的优化措施。

shell

复制代码

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 179892  99456 2093616    0    0    10    23    0    0 18  3 78  0  1
 1  0      0 179644  99456 2093648    0    0     0    84 6610 8943  9  3 87  0  1
 1  0      0 179484  99464 2093756    0    0     0    44 5788 8207  7  3 90  0  1
  • swpd:表示已使用的虚拟内存大小。如果该值大于0,则说明您的机器物理内存不足。您可能需要考虑添加更多的物理内存或者优化内存使用情况。
  • si:每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不足,或者存在内存泄漏。您可以通过查找消耗内存的进程,并采取相应的解决措施,如调整程序配置、优化算法或考虑添加更多的物理内存。
  • so:表示每秒写入磁盘的虚拟内存大小,单位为KB。如果这个值大于0,也说明物理内存不足或存在内存泄漏的问题。您可以采取类似的解决措施,如查找造成内存写入的原因,并进行相应的调整。

Disk 指标

df指令

df 指令用于显示文件系统的磁盘空间使用情况。

shell

复制代码

Filesystem                         1K-blocks     Used Available Use% Mounted on
devtmpfs                             8198728        0   8198728   0% /dev
tmpfs                                8209120        0   8209120   0% /dev/shm
tmpfs                                8209120   785368   7423752  10% /run
tmpfs                                8209120        0   8209120   0% /sys/fs/cgroup
/dev/xvda2                          24740988  3240172  20242588  14% /
/dev/xvda1                            999320   191032    755860  21% /boot
/dev/xvdc                          103080888 36598152  61223472  38% /data
overlay                            103080888 36598152  61223472  38% /data/docker/overlay2/14146e9df2cb2a01b247b6e6925a7cb336a240a951e517125fa5b195dd760cdc/merged
overlay                            103080888 36598152  61223472  38% /data/docker/overlay2/1e98b0940b332728355b96f0332ab6f0ed4d66fdacea8494d655ed78d4f0be65/merged
overlay                            103080888 36598152  61223472  38% /data/docker/overlay2/2c514a97956be0fbf4091282be6b298e7289344fca5f147b036211f220b6432c/merged
overlay                            103080888 36598152  61223472  38% /data/docker/overlay2/ea8e09ba0e5d86f96801d437e6939490c575ac77dc6951887c14ab3057559e39/merged
overlay                            103080888 36598152  61223472  38% /data/docker/overlay2/667133fede8fb8196919c59204f80cd0687baa2fd0bfd8fa4de0656aadb4d649/merged
overlay                            103080888 36598152  61223472  38% /data/docker/overlay2/d3fbcf704f77b369f8929db30edbb34d70ddcfe3cbd666050244fd604bea391b/merged
shm                                    65536        0     65536   0% /data/docker/containers/2dc760e7813cb27ffc9b3fd40507af548ddb54d90406c6f39dd22d47fb01ad91/mounts/shm

以下是对该指令输出的解释和建议:

  • Use%:表示已使用的磁盘空间占比。如果 Use% 小于等于 90%,则表示磁盘空间的使用程度还算正常。如果 Use% 持续超过 90%,则表示磁盘空间即将耗尽,可能会导致系统性能下降或无法正常工作。

建议您定期使用 df 命令检查磁盘空间的使用情况。如果发现某个文件系统的 Use% 超过了 90%,您可以考虑以下几种解决方法:

  1. 清理不必要的文件:删除不再使用的文件或将其迁移到其他存储设备中,以释放磁盘空间。
  2. 压缩文件:对某些文件进行压缩,以减少其所占用的磁盘空间。
  3. 扩大磁盘空间:如果有足够的物理磁盘空间,您可以考虑将分区扩大,以增加磁盘空间。

请记住,在执行任何涉及文件系统操作的操作之前,请务必备份重要数据,并谨慎操作。如有需要,请根据您的具体情况和系统要求,采取适当的解决方案。

Disk IO指标

需要明确一些具体的目标和需求。根据您提供的代码sar -d 1 1,这是一个用于查看磁盘报告的命令,查看磁盘报告 1 1 表示间隔1s,运行1次。

shell

复制代码

sar -d -1 1 | awk '/Average:/{print "Disk report: \n\n" $0}'

改进的地方包括

  1. 添加了-1选项,用于获取均值报告,而不是每秒的报告,以提供更具概括性的信息。
  2. 使用awk命令筛选出包含"Average:"的行,并在输出中添加一些描述性的文本,提供更清晰的报告。

shell

复制代码

[root@svr01]$ sar -d 1 1
    Linux 2.6.32-642.6.2.el6.x86_64 (SHB-L0044551) 07/20/2018 _x86_64_ (1 CPU)
    03:00:23 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
    03:00:24 PM dev252-0 23.00 808.00 80.00 38.61 9.88 375.35 43.48 100.00
    03:00:24 PM dev252-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    03:00:24 PM dev253-0 4.00 448.00 0.00 112.00 1.11 222.00 249.50 99.80
    03:00:24 PM dev253-1 50.00 400.00 0.00 8.00 24.40 523.20 20.00 100.00
    03:00:24 PM dev253-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    03:00:24 PM dev253-3 3.00 32.00 0.00 10.67 0.99 242.33 331.67 99.50
    03:00:24 PM dev253-4 0.00 0.00 0.00 0.00 1.61 0.00 0.00 100.00
    03:00:24 PM dev253-5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    03:00:24 PM dev253-6 3.00 0.00 24.00 8.00 1.30 393.67 261.33 78.40
    Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
    Average: dev252-0 23.00 808.00 80.00 38.61 9.88 375.35 43.48 100.00
    Average: dev252-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    Average: dev253-0 4.00 448.00 0.00 112.00 1.11 222.00 249.50 99.80
    Average: dev253-1 50.00 400.00 0.00 8.00 24.40 523.20 20.00 100.00
    Average: dev253-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    Average: dev253-3 3.00 32.00 0.00 10.67 0.99 242.33 331.67 99.50
    Average: dev253-4 0.00 0.00 0.00 0.00 1.61 0.00 0.00 100.00
    Average: dev253-5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    Average: dev253-6 3.00 0.00 24.00 8.00 1.30 393.67 261.33 78.40
参数介绍
  1. 如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好。而如果await的值远高于svctm的值,表示I/O队列等待太长,系统上运行的应用程序将变慢。
  2. 对于%util的说明,我根据文本内容和上下文进行了调整。当%util接近100%时,表示磁盘产生的I/O请求过多,I/O系统已经满负荷工作,该磁盘请求饱和,可能存在瓶颈。
  3. 对于idle的说明,我进行了改进和重新表述。如果idle小于70%,表示I/O压力较大,即有较多的I/O请求。

Network IO指标

netstat指令

该命令的作用是列出所有TCP连接的状态,并按照连接状态的数量进行排序,从而查看网络IO指标。

shell

复制代码

netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn

这个命令netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn用于查看网络IO指标。我为您解释一下每个部分的含义:

  • netstat -natnetstat是用于显示网络连接信息的命令,选项-nat表示显示所有的TCP连接,不进行域名解析。
  • awk '{print $6}'awk是用于文本处理的命令,这里的语句'{print $6}'表示打印每行的第六列,也就是网络连接的状态。
  • sortsort命令用于对文本进行排序,默认按照字母顺序进行排序。
  • uniq -c 行,选项-c`表示同时计算每个行重复出现的次数。
  • sort -rnsort命令的选项-r表示按照逆序进行排序,选项-n表示按数字大小进行排序。
结果指令分析

根据您提供的netstat命令的输出,目前系统中有大量的ESTABLISHED连接和TIME_WAIT连接。这是一种正常的网络连接状态,但是大量的TIME_WAIT连接可能会导致端口资源耗尽的问题

在网络通信中,当两台计算机建立TCP连接时,会经历类似以下步骤:

  1. 客户端发送SYN包到服务器端,请求建立连接(状态为SYN_SENT)。
  2. 服务器接收到SYN包后,发送SYN-ACK包作为响应,表示接受连接请求(状态为ESTABLISHED)。
  3. 客户端接收到SYN-ACK包后,再发送ACK包作为确认(状态仍为ESTABLISHED)。
  4. 服务器接收到ACK包后,连接建立完成(状态仍为ESTABLISHED)。
  5. 客户端和服务器端进行数据传输(状态仍为ESTABLISHED)。
  6. 连接关闭时,一方发送FIN包表示要关闭连接(状态为FIN_WAIT1)。
  7. 接收到FIN包的一方发送ACK包作为确认(状态为FIN_WAIT2)。
  8. 当双方都发送了FIN包并收到了对方的ACK后,连接关闭(状态为TIME_WAIT)。
TIME_WAIT

TIME_WAIT是一个连接关闭后等待一段时间的状态,用于确保网络中的所有数据包都已被接收。这是TCP协议的一种设计,防止旧的数据包在新连接建立时被错误地交付

如果您发现大量的TIME_WAIT连接占用了大量的端口资源,可能需要调整系统的TCP参数,如减少TIME_WAIT的等待时间或增加端口范围,以避免资源耗尽的问题。

ESTABLISHED

ESTABLISHED状态的连接表示当前仍处于活动状态的连接,数据仍在传输中。根据当前的状态统计,您可以了解到网络的连接情况和数据传输的活跃程度。

统计的量化指标

有些命令通用,有些是我根据系统的日志文件格式利用awk/sed两个命令结合写出来的。

网络问题排查

问题排查点:查看TCP连接状态

这个命令用于统计处于不同状态的网络连接的数量。

shell

复制代码

netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn

输出结果信息

shell

复制代码

[root@ibm-pru-master ~]# netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn 
    248 ESTABLISHED
     56 TIME_WAIT
     46 LISTEN
     10 CLOSE_WAIT
      1 Foreign
      1 established)

逐步解释每个命令的作用:

  1. netstat -nat:显示所有活动的网络连接,包括TCP和UDP,并显示数字格式的地址和端口号。
  2. awk '{print $6}':提取每行数据的第六列,即连接的状态。
  3. sort:对提取的连接状态进行排序。
  4. uniq -c:对排序后的连接状态进行统计,显示每个状态的数量,并去除重复项。
  5. sort -rn:按照数量进行逆序排序。

综合起来,该命令用于统计网络连接的不同状态及其数量。它可以帮助你了解当前系统中不同连接状态的分布情况,有助于网络故障诊断和性能优化。常见的连接状态包括ESTABLISHED(已建立连接)、TIME_WAIT(等待连接关闭)、CLOSE_WAIT(等待连接关闭)、SYN_SENT(已发送连接请求)等。通过这些统计信息,你可以追踪网络连接的状况并进行必要的排查和优化。

问题排查点:查找较多time_wait连接

这个命令用于查找处于"TIME_WAIT"状态的TCP连接,并统计这些连接的远程IP地址的数量。

shell

复制代码

netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n 20

输出结果信息-出现数量最多的前20行

shell

复制代码

[root@ibm-pru-master ~]# netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n 20
     10 10.42.0.194:8080
      9 10.42.0.191:7001
      2 10.42.0.192:5009
      2 10.42.0.188:8080
      1 127.0.0.1:45420
      1 127.0.0.1:45238
      1 127.0.0.1:45064
      1 127.0.0.1:44882
      1 127.0.0.1:41956
      1 127.0.0.1:41770
      1 127.0.0.1:41592
      1 127.0.0.1:41410
      1 10.42.0.184:8080
      1 10.116.53.174:42678
      1 10.116.53.174:42624
      1 10.116.53.174:42554
      1 10.116.53.174:42510
      1 10.116.53.174:42428
      1 10.116.53.174:42386
      1 10.116.53.174:42320

逐步解释每个命令的作用:

  1. netstat -n:显示所有活动的网络连接,不解析主机名和端口号。
  2. grep TIME_WAIT:过滤出只显示处于"TIME_WAIT"状态的连接。
  3. awk '{print $5}':提取每行数据的第五列,即连接的远程地址和端口。
  4. sort:对提取的远程地址进行排序。
  5. uniq -c:对排序后的远程地址进行统计,显示每个地址的出现次数并去除重复项。
  6. sort -rn:按照出现次数进行逆序排序。
  7. head -n 20:只显示前20个结果,即出现次数最多的前20个远程地址。

综合起来,该命令用于列出处于"TIME_WAIT"状态的TCP连接中,出现次数最多的前20个远程IP地址。这对于网络故障排查和性能优化很有帮助,可以帮助确定哪些IP地址频繁使用TCP连接并保持在"TIME_WAIT"状态。


最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)(二)https://developer.aliyun.com/article/1471038

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
算法 Linux 调度
深入理解Linux内核调度器:从基础到优化####
本文旨在通过剖析Linux操作系统的心脏——内核调度器,为读者揭开其高效管理CPU资源的神秘面纱。不同于传统的摘要概述,本文将直接以一段精简代码片段作为引子,展示一个简化版的任务调度逻辑,随后逐步深入,详细探讨Linux内核调度器的工作原理、关键数据结构、调度算法演变以及性能调优策略,旨在为开发者与系统管理员提供一份实用的技术指南。 ####
118 4
|
1月前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
2月前
|
安全 Linux KVM
Linux虚拟化技术:从Xen到KVM
Xen和KVM是Linux平台上两种主要的虚拟化技术,各有优缺点和适用场景。通过对比两者的架构、性能、安全性、管理复杂性和硬件依赖性,可以更好地理解它们的适用场景和选择依据。无论是高性能计算、企业虚拟化还是云计算平台,合理选择和配置虚拟化技术是实现高效、稳定和安全IT环境的关键。
117 8
|
3月前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
98 17
|
2月前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
2月前
|
监控 算法 Linux
Linux内核锁机制深度剖析与实践优化####
本文作为一篇技术性文章,深入探讨了Linux操作系统内核中锁机制的工作原理、类型及其在并发控制中的应用,旨在为开发者提供关于如何有效利用这些工具来提升系统性能和稳定性的见解。不同于常规摘要的概述性质,本文将直接通过具体案例分析,展示在不同场景下选择合适的锁策略对于解决竞争条件、死锁问题的重要性,以及如何根据实际需求调整锁的粒度以达到最佳效果,为读者呈现一份实用性强的实践指南。 ####
|
2月前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
3月前
|
缓存 网络协议 Linux
深入探索Linux操作系统的内核优化策略####
本文旨在探讨Linux操作系统内核的优化方法,通过分析当前主流的几种内核优化技术,结合具体案例,阐述如何有效提升系统性能与稳定性。文章首先概述了Linux内核的基本结构,随后详细解析了内核优化的必要性及常用手段,包括编译优化、内核参数调整、内存管理优化等,最后通过实例展示了这些优化技巧在实际场景中的应用效果,为读者提供了一套实用的Linux内核优化指南。 ####
92 1
|
3月前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
101 9
|
3月前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
62 5