Linux性能监控、调优(CPU篇)
Linux操作系统内核性能测试与调优

Linux操作系统内核性能测试与调优操作系统是计算机系统中最核心的软件之一,它负责协调和管理计算机硬件资源以及提供统一的用户界面。
Linux操作系统因其开放源代码、稳定性和安全性而备受欢迎。
然而,在大规模和高负载的环境中,Linux操作系统的性能可能会出现瓶颈。
因此,进行内核性能测试与调优是非常重要的。
一、性能测试的重要性在处理大量数据和并发用户请求时,操作系统的性能会成为瓶颈。
通过性能测试,我们可以了解操作系统在不同负载情况下的表现,进而定位和解决性能瓶颈。
性能测试有助于提高系统的响应时间、吞吐量和并发性能,从而确保系统的稳定运行。
二、性能测试的分类1. 压力测试:通过模拟实际用户行为或产生大量虚拟用户,并观察系统在负载增加的情况下的响应时间和吞吐量。
常用的压力测试工具包括Apache JMeter和Gatling等。
2. 负载测试:通过模拟实际业务场景,并且能够测试系统在高负载情况下的响应能力和稳定性。
这种测试方法可以帮助我们发现系统在繁忙时是否仍然能够正常工作,并识别可能存在的性能瓶颈。
3. 并发测试:通过模拟多个并发用户并行执行相同或不同的操作,以验证系统在并发访问下的性能表现。
这种测试方法可以评估系统的并发处理能力和资源利用率。
三、内核性能调优的重要性Linux操作系统的性能与其内核配置息息相关。
对内核的性能调优可以提高系统的响应速度、降低延迟和提高吞吐量。
通过调整内核参数和优化内核模块,可以使操作系统更好地适应特定的工作负载。
四、内核性能调优的方法1. 内核参数调整:根据系统的工作负载特点,适当调整内核参数。
例如,可以通过修改TCP/IP堆栈参数来提高网络性能,或者通过修改文件系统参数来提高磁盘I/O性能。
2. 内核模块优化:优化内核使用的模块,选择性加载和卸载不必要的模块,以减少内核的资源占用和启动时间。
3. 中断处理优化:通过合理分配和调整中断处理的优先级,减少中断处理的开销,提高系统的性能。
如何进行系统性能监控与调优

如何进行系统性能监控与调优系统性能监控与调优是保证系统正常运行和提高系统性能的重要环节。
通过实时监控系统的运行状态,发现和解决系统性能瓶颈,可以提高系统的稳定性和响应速度,提升用户体验。
一、系统性能监控1.系统性能监控的重要性系统性能监控可以实时了解系统的负载、资源使用和性能瓶颈,在系统出现问题时能够迅速发现并采取相应的措施。
通过合理设置性能监控指标,可以做到及时预警和快速定位问题,以保障系统的正常运行。
2.性能监控的指标(1)CPU使用率:监测CPU的使用情况,以便及时发现CPU过载或者负荷不均衡的情况。
(2)内存使用情况:检测内存的占用情况,及时发现内存泄漏或者内存不足的问题。
(3)磁盘读写情况:监控磁盘的读写速度,了解磁盘的繁忙程度,以便优化磁盘IO操作。
(4)网络带宽使用情况:监测网络带宽的使用情况,发现网络拥塞或者瓶颈问题。
(5)系统响应时间:记录系统的响应时间,以便发现系统的性能问题。
3.监控工具的选择根据实际需求选择合适的监控工具,常用的系统监控工具有Zabbix、Nagios、Cacti等。
这些工具可以通过在监控服务器上安装相应的代理软件,采集关键指标并进行展示和告警。
4.监控数据的分析通过监控工具采集的数据可以获得系统的各项性能指标,需要对这些数据进行定期分析,以便发现问题并采取相应的调优措施。
可以通过图表和报表的形式展示监控数据,更直观地了解系统的运行状态。
二、系统性能调优1.性能调优的方法(1)优化数据库:可以通过如索引的创建、查询语句的优化、分表分库等方式来提高数据库的性能。
(2)优化代码:对于性能瓶颈较大的代码进行优化,如减少循环次数、避免重复计算、异步操作等。
(3)优化网络:通过优化网络架构和使用CDN技术等方式来提升网络传输速度。
(4)优化系统配置:合理配置系统参数,如调整内核参数、网络参数等,以提高系统的性能。
2.性能调优的工具(1)性能分析工具:如Apache JMeter、Gatling等,可以模拟大量用户并监测系统的性能。
linuxcpu常用命令

linuxcpu常用命令在Linux系统中,有许多用于查看和管理CPU信息的常用命令。
以下是一些常见的Linux CPU相关命令:1. top:用于实时监视系统的性能情况,包括CPU的使用率、进程信息等。
在终端中输入`top`即可启动。
2. htop:类似于top,但提供了更多的交互式界面和功能。
需要先安装,然后在终端中输入`htop`启动。
3. uptime:显示系统的运行时间以及平均负载。
在终端中输入`uptime`即可查看。
4. cat /proc/cpuinfo:查看CPU的详细信息,包括型号、频率、核心数等。
在终端中输入该命令即可。
5. lscpu:以更友好的方式显示CPU信息,包括架构、型号、频率、核心数等。
在终端中输入`lscpu`即可查看。
6. mpstat:用于显示每个CPU的使用率和其他性能数据。
需要安装sysstat 包,然后在终端中输入`mpstat`启动。
7. ps:显示当前运行的进程信息,可以包括进程的CPU使用率等。
在终端中输入`ps aux`查看全部进程信息。
8. pidstat:提供有关每个进程的CPU使用率等信息。
需要安装sysstat包,然后在终端中输入`pidstat`启动。
9. nmon:提供了全面的系统性能监控,包括CPU、内存、磁盘等信息。
需要安装nmon包,然后在终端中输入`nmon`启动。
10. sar:提供了历史性能数据的报告,可以用于分析系统的CPU利用率等信息。
需要安装sysstat包,然后在终端中输入`sar`查看报告。
这些命令可以帮助你监控和管理Linux系统中的CPU性能。
根据你的需求,选择适合的命令来获取所需的信息。
Linux命令高级技巧使用top命令实时监控系统资源和进程

Linux命令高级技巧使用top命令实时监控系统资源和进程Linux命令高级技巧:使用top命令实时监控系统资源和进程在Linux系统中,top命令是一种非常强大的工具,能够实时监控系统的资源占用情况和进程运行状态。
无论是系统管理员还是开发人员,都可以通过top命令来了解系统的运行情况,及时进行资源调整和问题排查。
本文将介绍如何使用top命令,并分享一些高级技巧,帮助你更加高效地使用这个命令。
1. top命令的基本用法首先,让我们来了解一下top命令的基本用法。
在终端中输入top,即可启动top命令。
你会看到一个实时更新的界面,显示了系统的资源使用情况和进程列表。
默认情况下,top按照CPU占用率进行排序,最耗费CPU的进程位于最上方。
下面是top命令界面的主要部分:```top - 22:30:45 up 5 days, 10:45, 2 users, load average: 0.01, 0.05, 0.07Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombie%Cpu(s): 1.8 us, 0.7 sy, 0.0 ni, 97.3 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 stKiB Mem : 8000000 total, 4000000 free, 1500000 used, 2500000buff/cacheKiB Swap: 2000000 total, 2000000 free, 0 used. 6000000 availMemPID USER PR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND 1910 user1 20 0 174124 23716 16180 R 3.3 0.3 0:01.26 top1 root 20 0 225180 15428 9208 S 0.0 0.2 0:03.88 systemd2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp...```在这个界面中,你可以看到系统的负载平均值(load average)、进程总数、CPU使用情况、内存使用情况以及进程列表等信息。
linux调优参数

在Linux系统上,可以通过调整参数来优化系统的性能和功能。
以下是一些常见的Linux调优参数:内存管理:vm.swappiness:调整交换分区的使用频率,默认值为60,建议将其设置为10或更低的值,以减少交换分区的使用。
vm.min_free_kbytes:设置系统保留的空闲内存量,默认值为64,建议根据实际情况调整。
vm.max_map_count:设置进程可以拥有的最大内存映射数量,默认值为65536,如果需要运行大量进程或使用大量内存映射,可以适当增加该值。
网络性能:net.ipv4.tcp_tw_reuse:允许重用TIME_WAIT套接字,默认值为0,建议将其设置为1以减少TIME_WAIT套接字数量。
net.ipv4.tcp_fin_timeout:设置TIME_WAIT套接字的超时时间,默认值为60秒,可以适当增加该值以减少TIME_WAIT套接字数量。
net.ipv4.tcp_keepalive_time:设置TCP keepalive探测的间隔时间,默认值为75秒,可以适当增加该值以避免因长时间不活动而断开连接。
文件系统:fs.file-max:设置系统可以同时打开的最大文件数量,默认值为1024,可以根据实际情况调整。
fs.nr_open:设置系统进程可以同时打开的文件数量上限,默认值为8192,可以根据实际情况调整。
CPU 调度:kernel.sched_min_granularity_ns:设置最小调度时间粒度,默认值为1000000纳秒(1毫秒),可以根据实际情况调整。
kernel.sched_migration_cost_ns:设置CPU调度迁移的开销时间,默认值为500000纳秒(半毫秒),可以适当增加该值以提高系统在多核处理器上的性能。
系统进程:kernel.panic:设置系统崩溃时的重启次数,默认值为1,建议将其设置为0以避免系统无限重启。
fs.inotify.max_user_instances:设置系统可以监视的文件系统实例数量上限,默认值为8192,可以根据实际情况调整。
虚拟机的性能监控和调优

虚拟机的性能监控和调优虚拟机(Virtual Machine,简称VM)是一种软件仿真技术,它能够在一个主机上模拟出多个独立的虚拟电脑环境。
随着云计算的发展,虚拟化技术在数据中心中得到广泛应用。
在使用虚拟机的过程中,如何进行性能监控和调优以确保虚拟机的正常运行和高效性能,成为了一项重要任务。
一、性能监控性能监控是指通过检测和记录虚拟机关键指标,以获得虚拟机的性能信息并进行分析、评估的过程。
性能监控可以帮助管理员及时发现虚拟机的瓶颈问题,以及对性能进行优化和调整。
1. 监控指标在进行虚拟机性能监控时,需要选择一些关键的监控指标,如:CPU利用率:监控CPU的使用率,了解虚拟机对CPU资源的需求情况。
内存利用率:监控内存的使用率,了解虚拟机对内存资源的需求情况。
磁盘IO:监控磁盘的读写速度,了解虚拟机对磁盘IO的利用情况。
网络带宽:监控网络的传输速率,了解虚拟机对网络资源的利用情况。
2. 监控工具常用的虚拟机性能监控工具包括Zabbix、Grafana和Nagios等。
这些工具提供了多种监控方式,可以通过图表、报警等形式实时监控虚拟机性能指标。
二、性能调优性能调优是指通过采取一系列措施来提升虚拟机的性能,减少资源的浪费和瓶颈问题,提高系统的吞吐量和响应速度。
1. 虚拟机分配资源首先要根据虚拟机的实际需求合理分配资源,包括CPU、内存、磁盘和网络资源。
根据不同的负载情况,适当增加或减少虚拟机的资源配额,以达到最佳性能。
2. 主机资源管理在虚拟化环境中,主机是承载虚拟机的物理服务器。
为了最大化资源的利用率,需要对主机资源进行合理管理。
可以通过合理划分主机的物理资源,对虚拟机进行负载均衡,使得每台虚拟机的负载相对平衡。
3. 存储优化存储是虚拟机性能的重要因素之一。
可以通过使用高性能的存储设备,如SSD固态硬盘,来提升虚拟机的磁盘IO性能。
此外,可以使用存储缓存技术,如RAID和存储快照,来提高虚拟机的读写性能和数据保护能力。
Linux系统性能监控Shell脚本

Linux系统性能监控Shell脚本在Linux操作系统中,性能监控是非常重要的,它可以帮助我们了解系统的运行状态、资源利用情况以及可能存在的性能问题。
为了方便地对系统进行性能监控,我们可以编写一个Shell脚本来自动化这个过程。
本文将介绍如何编写一个功能全面且实用的Linux系统性能监控Shell脚本。
一、功能需求1. CPU负载监控:监控CPU的使用率、空闲率、负载均衡等信息。
2. 内存使用监控:监控内存的总量、使用量、剩余量以及内存使用率。
3. 磁盘空间监控:监控各个挂载点的磁盘空间使用情况。
4. 网络流量监控:监控网络接口的进出流量、带宽使用率。
5. 进程监控:监控指定进程的运行状态、资源占用情况。
二、Shell脚本编写1. 获取CPU信息```shell#!/bin/bashcpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')cpu_idle=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}')load_avg=$(cat /proc/loadavg | awk '{print $1, $2, $3}')echo "CPU使用率:$cpu_usage"echo "CPU空闲率:$cpu_idle"echo "负载均衡:$load_avg"```2. 获取内存信息```shell#!/bin/bashtotal_mem=$(free -m | grep "Mem:" | awk '{print $2}')used_mem=$(free -m | grep "Mem:" | awk '{print $3}')free_mem=$(free -m | grep "Mem:" | awk '{print $4}')mem_usage=$(free -m | grep "Mem:" | awk '{print $3/$2 * 100.0}') echo "总内存:$total_mem MB"echo "已使用内存:$used_mem MB"echo "剩余内存:$free_mem MB"echo "内存使用率:$mem_usage%"```3. 获取磁盘空间信息```shell#!/bin/bashdf -h | awk 'NR>1 {print "挂载点:"$6", 使用率:"100 - $5"%"}'```4. 获取网络流量信息```shell#!/bin/bashnetstat -i | awk '{if(NR>2) {print "接口"$1", 进流量:"$(NF-1)"bytes, 出流量:"$(NF)"bytes"}}'```5. 获取指定进程信息```shell#!/bin/bashprocess_name="web_server"pid=$(pgrep $process_name)cpu_usage=$(top -bn1 -p $pid | grep $pid | awk '{print $9}')mem_usage=$(top -bn1 -p $pid | grep $pid | awk '{print $10}')echo "进程名称:$process_name"echo "进程ID:$pid"echo "CPU使用率:$cpu_usage%"echo "内存使用率:$mem_usage%"```三、使用Shell脚本进行性能监控将以上各个功能模块整合到一个Shell脚本中,命名为`performance_monitor.sh`。
性能监控与调优措施

性能监控与调优措施在当今数字化的时代,无论是企业的业务系统、网站应用,还是个人使用的电子设备,性能的优劣都直接影响着用户体验和工作效率。
性能监控与调优就成为了确保系统稳定、高效运行的关键环节。
性能监控是指对系统的各种性能指标进行实时或定期的测量和收集,以便了解系统的运行状况。
这些性能指标可以包括 CPU 使用率、内存利用率、磁盘 I/O 速度、网络带宽使用情况等。
通过性能监控,我们能够及时发现系统中可能存在的性能瓶颈,为后续的调优工作提供依据。
要有效地进行性能监控,首先需要选择合适的监控工具。
市场上有许多性能监控工具可供选择,如 Nagios、Zabbix、Prometheus 等。
这些工具可以根据系统的类型和需求进行配置,以收集所需的性能数据。
在监控过程中,数据的采集频率也非常重要。
采集频率过高可能会对系统性能产生一定的影响,而采集频率过低则可能错过关键的性能变化。
一般来说,对于关键性能指标,采集频率可以设置得较高,而对于一些相对不那么重要的指标,可以适当降低采集频率。
除了选择工具和设置采集频率,确定监控的重点也至关重要。
不同的系统可能有不同的性能关键节点。
例如,对于一个数据库系统,数据库的查询性能、索引使用情况等可能是重点;对于一个 Web 应用,服务器的响应时间、并发处理能力等则可能更为关键。
当通过性能监控发现了系统的性能问题后,就需要采取调优措施来解决这些问题。
性能调优是一个复杂而细致的过程,需要综合考虑多个方面的因素。
在硬件层面,如果发现系统的内存不足导致性能下降,可以考虑增加内存容量;如果磁盘 I/O 成为瓶颈,可以更换为更快的磁盘或使用磁盘阵列(RAID)技术来提高磁盘性能。
在软件层面,对于数据库系统,可以优化查询语句、创建合适的索引、调整数据库参数等;对于操作系统,可以优化进程调度算法、调整内核参数等。
以 Web 应用为例,如果服务器的响应时间过长,可能是由于代码逻辑不合理导致的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux性能监控、调优(CPU篇)前言: 网上其实有很多关于这方面的文章,那为什么还会有此篇呢,有这么几个原因,是我翻译的动力,第一,概念和内容虽然老套,但都讲得很透彻,而且还很全面.第二,理论结合实际,其中案例分析都不错.第三,不花哨,采用的工具及命令都是最基本的,有助于实际操作.但本人才疏学浅,译文大多数都是立足于自己对原文的理解,大家也可以自己去OSCAN上找原文,如果有什么较大出入,还望留言回复,甚是感激!1.0 性能监控介绍性能优化就是找到系统处理中的瓶颈以及去除这些的过程,多数管理员相信看一些相关的"cook book"就可以实现性能优化,通常通过对内核的一些配置是可以简单的解决问题,但并不适合每个环境,性能优化其实是对OS 各子系统达到一种平衡的定义,这些子系统包括了:CPUMemoryIONetwork这些子系统之间关系是相互彼此依赖的,任何一个高负载都会导致其他子系统出现问题.比如:大量的页调入请求导致内存队列的拥塞网卡的大吞吐量可能导致更多的CPU开销大量的CPU开销又会尝试更多的内存使用请求大量来自内存的磁盘写请求可能导致更多的CPU 以及IO问题所以要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能是别的子系统导致的.1.1 确定应用类型基于需要理解该从什么地方来入手优化瓶颈,首先重要的一点,就是理解并分析当前系统的特点,多数系统所跑的应用类型,主要为2种:IO Bound(译注:IO 范畴): 在这个范畴中的应用,一般都是高负荷的内存使用以及存储系统,这实际上表示IO 范畴的应用,就是一个大量数据处理的过程.IO 范畴的应用不对CPU 以及网络发起更多请求(除非类似NAS这样的网络存储硬件).IO 范畴的应用通常使用CPU 资源都是为了产生IO 请求以及进入到内核调度的sleep 状态.通常数据库软件(译注:mysql,oracle等)被认为是IO 范畴的应用类型.CPU Bound(译注:CPU 范畴): 在这个范畴中的应用,一般都是高负荷的CPU 占用. CPU 范畴的应用,就是一个批量处理CPU 请求以及数学计算的过程.通常web server,mail server,以及其他类型服务被认为是CPU 范畴的应用类型.1.2 确定基准线统计系统利用率情况,一般随管理员经验以及系统本身用途来决定.唯一要清楚的就是,系统优化希望达成什么效果,以及哪些方面是需要优化,还有参考值是什么?因此就建立一个基准线,这个统计数据必须是系统可用性能状态值,用来比较不可用性能状态值.在以下例子中,1个系统性能的基准线快照,用来比较当高负荷时的系统性能快照.# vmstat 1procs memory swap io system cpur b swpd free buff cache si so bi bo in cs us sy wa id1 0 138592 17932 126272 214244 0 0 1 18 109 19 2 1 1 960 0 138592 17932 126272 214244 0 0 0 0 105 46 0 1 0 990 0 138592 17932 126272 214244 0 0 0 0 198 62 40 14 0 450 0 138592 17932 126272 214244 0 0 0 0 117 49 0 0 0 1000 0 138592 17924 126272 214244 0 0 0 176 220 938 3 4 13 800 0 138592 17924 126272 214244 0 0 0 0 358 1522 8 17 0 751 0 138592 17924 126272 214244 0 0 0 0 368 1447 4 24 0 720 0 138592 17924 126272 214244 0 0 0 0 352 1277 9 12 0 79# vmstat 1procs memory swap io system cpur b swpd free buff cache si so bi bo in cs us sy wa id2 0 145940 17752 118600 215592 0 1 1 18 109 19 2 1 1 962 0 145940 15856 118604 215652 0 0 0 468 789 108 86 14 0 03 0 146208 13884 118600 214640 0 360 0 360 498 71 91 9 0 02 0 146388 13764 118600 213788 0 340 0 340 672 41 87 13 0 02 0 147092 13788 118600 212452 0 740 0 1324 620 61 92 8 0 02 0 147360 13848 118600 211580 0 720 0 720 690 41 96 4 0 02 0 147912 13744 118192 210592 0 720 0 720 605 44 95 5 0 02 0 148452 13900 118192 209260 0 372 0 372 639 45 81 19 0 02 0 149132 13692 117824 208412 0 372 0 372 457 47 90 10 0 0从上面第一个结果可看到,最后一列(id) 表示的是空闲时间,我们可以看到,在基准线统计时,CPU 的空闲时间在79% - 100%.在第二个结果可看到,系统处于100%的占用率以及没有空闲时间.从这个比较中,我们就可以确定是否是CPU 使用率应该被优化.2.0 安装监控工具多数*nix系统都有一堆标准的监控命令.这些命令从一开始就是*nix 的一部分.Linux 则通过基本安装包以及额外包提供了其他监控工具,这些安装包多数都存在各个Linux 发布版本中.尽管还有其他更多的开源以及第三方监控软件,但本文档只讨论基于Linux 发布版本的监控工具.本章将讨论哪些工具怎样来监控系统性能.Tool Description Base Repositoryvmstat all purpose performance tool yes yesmpstat provides statistics per CPU no yessar all purpose performance monitoring tool no yesiostat provides disk statistics no yesnetstat provides network statistics yes yesdstat monitoring statistics aggregator no in most distributionsiptraf traffic monitoring dashboard no yesnetperf Network bandwidth tool no In some distributionsethtool reports on Ethernet interface configuration yes yesiperf Network bandwidth tool no yestcptrace Packet analysis tool no yes3.0 CPU 介绍CPU 利用率主要依赖于是什么资源在试图存取.内核调度器将负责调度2种资源种类:线程(单一或者多路)和中断.调度器去定义不同资源的不同优先权.以下列表从优先级高到低排列:Interrupts(译注:中断) - 设备通知内核,他们完成一次数据处理的过程.例子,当一块网卡设备递送网络数据包或者一块硬件提供了一次IO 请求.Kernel(System) Processes(译注:内核处理过程) - 所有内核处理过程就是控制优先级别.User Processes(译注:用户进程) - 这块涉及"userland".所有软件程序都运行在这个user space.这块在内核调度机制中处于低优先级.从上面,我们可以看出内核是怎样管理不同资源的.还有几个关键内容需要介绍,以下部分就将介绍context(译注:上下文切换),run queues(译注:运行队列)以及utilization(译注:利用率).3.1 上下文切换多数现代处理器都能够运行一个进程(单一线程)或者线程.多路超线程处理器有能力运行多个线程.然而,Linux 内核还是把每个处理器核心的双核心芯片作为独立的处理器.比如,以Linux 内核的系统在一个双核心处理器上,是报告显示为两个独立的处理器.一个标准的Linux 内核可以运行50 至50,000 的处理线程.在只有一个CPU时,内核将调度并均衡每个进程线程.每个线程都分配一个在处理器中被开销的时间额度.一个线程要么就是获得时间额度或已抢先获得一些具有较高优先级(比如硬件中断),其中较高优先级的线程将从区域重新放置回处理器的队列中.这种线程的转换关系就是我们提到的上下文切换.每次内核的上下文切换,资源被用于关闭在CPU寄存器中的线程和放置在队列中.系统中越多的上下文切换,在处理器的调度管理下,内核将得到更多的工作.3.2 运行队列每个CPU 都维护一个线程的运行队列.理论上,调度器应该不断的运行和执行线程.进程线程不是在sleep 状态中(译注:阻塞中和等待IO中)或就是在可运行状态中.如果CPU 子系统处于高负荷下,那就意味着内核调度将无法及时响应系统请求.导致结果,可运行状态进程拥塞在运行队列里.当运行队列越来越巨大,进程线程将花费更多的时间获取被执行.比较流行的术语就是"load",它提供当前运行队列的详细状态.系统load 就是指在CPU 队列中有多少数目的线程,以及其中当前有多少进程线程数目被执行的组合.如果一个双核系统执行了2个线程,还有4个在运行队列中,则load 应该为 6. top 这个程序里显示的load averages 是指1,5,15 分钟以内的load 情况.3.3 CPU 利用率CPU 利用率就是定义CPU 使用的百分比.评估系统最重要的一个度量方式就是CPU 的利用率.多数性能监控工具关于CPU 利用率的分类有以下几种:User Time(译注:用户进程时间) - 关于在user space中被执行进程在CPU 开销时间百分比.System Time(译注:内核线程以及中断时间) - 关于在kernel space中线程和中断在CPU 开销时间百分比.Wait IO(译注:IO 请求等待时间) - 所有进程线程被阻塞等待完成一次IO 请求所占CPU 开销idle的时间百分比.Idle(译注:空闲) - 一个完整空闲状态的进程在CPU 处理器中开销的时间百分比.4.0 CPU 性能监控理解运行队列,利用率,上下文切换对怎样CPU 性能最优化之间的关系.早期提及到,性能是相对于基准线数据的.在一些系统中,通常预期所达到的性能包括:Run Queues - 每个处理器应该运行队列不超过1-3 个线程.例子,一个双核处理器应该运行队列不要超过6 个线程.CPU Utiliation - 如果一个CPU 被充分使用,利用率分类之间均衡的比例应该是65% - 70% User Time30% - 35% System Time0% - 5% Idle TimeContext Switches - 上下文切换的数目直接关系到CPU 的使用率,如果CPU 利用率保持在上述均衡状态时,大量的上下文切换是正常的.很多Linux 上的工具可以得到这些状态值,首先就是vmstat 和top 这2个工具.4.1 vmstat 工具的使用vmstat 工具提供了一种低开销的系统性能观察方式.因为vmstat 本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果.这个工具运行在2种模式下:average 和sample 模式.sample 模式通过指定间隔时间测量状态值.这个模式对于理解在持续负荷下的性能表现,很有帮助.下面就是vmstat 运行1秒间隔的示例:# vmstat 1procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----r b swpd free buff cache si so bi bo in cs us sy id wa0 0 104300 16800 95328 72200 0 0 5 26 7 14 4 1 95 00 0 104300 16800 95328 72200 0 0 0 24 1021 64 1 1 98 00 0 104300 16800 95328 72200 0 0 0 0 1009 59 1 1 98 0Table 1: The vmstat CPU statisticsField Descriptionr The amount of threads in the run queue. These are threads that are runnable, but the CPU is not available to execute them.当前运行队列中线程的数目.代表线程处于可运行状态,但CPU 还未能执行.b This is the number of processes blocked and waiting on IO requests to finish.当前进程阻塞并等待IO 请求完成的数目in This is the number of interrupts being processed.当前中断被处理的数目cs This is the number of context switches currently happening on the system.当前kernel system中,发生上下文切换的数目us This is the percentage of user CPU utilization.CPU 利用率的百分比sys This is the percentage of kernel and interrupts utilization.内核和中断利用率的百分比wa This is the percentage of idle processor time due to the fact that ALL runnable threads are blocked waiting on IO.所有可运行状态线程被阻塞在等待IO 请求的百分比id This is the percentage of time that the CPU is completely idle.CPU 空闲时间的百分比4.2 案例学习:持续的CPU 利用率在这个例子中,这个系统被充分利用# vmstat 1procs memory swap io system cpur b swpd free buff cache si so bi bo in cs us sy wa id3 0 206564 15092 80336 176080 0 0 0 0 718 26 81 19 0 02 0 206564 14772 80336 176120 0 0 0 0 758 23 964 0 01 0 206564 14208 80336 176136 0 0 0 0 820 20 96 4 0 01 0 206956 13884 79180 175964 0 412 0 2680 1008 80 93 7 0 02 0 207348 14448 78800 175576 0 412 0 412 763 70 84 16 0 02 0 207348 15756 78800 175424 0 0 0 0 874 25 89 11 0 01 0 207348 16368 78800 175596 0 0 0 0 940 24 86 14 0 01 0 207348 16600 78800 175604 0 0 0 0 929 27 95 3 0 23 0 207348 16976 78548 175876 0 0 0 2508 969 35 93 7 0 04 0 207348 16216 78548 175704 0 0 0 0 874 36 93 6 0 14 0 207348 16424 78548 175776 0 0 0 0 850 26 77 23 0 02 0 207348 17496 78556 175840 0 0 0 0 736 23 83 17 0 00 0 207348 17680 78556 175868 0 0 0 0 861 21 91 8 0 1根据观察值,我们可以得到以下结论:1,有大量的中断(in) 和较少的上下文切换(cs).这意味着一个单一的进程在产生对硬件设备的请求.2,进一步显示某单个应用,user time(us) 经常在85%或者更多.考虑到较少的上下文切换,这个应用应该还在处理器中被处理.3,运行队列还在可接受的性能范围内,其中有2个地方,是超出了允许限制.4.3 案例学习:超负荷调度在这个例子中,内核调度中的上下文切换处于饱和# vmstat 1procs memory swap io system cpur b swpd free buff cache si so bi bo in cs us sy wa id2 1 207740 98476 81344 180972 0 0 2496 0 900 28834 12 57 270 1 207740 96448 83304 180984 0 0 1968 328 810 2559 8 9 83 00 1 207740 94404 85348 180984 0 0 2044 0 829 2879 9 6 78 70 1 207740 92576 87176 180984 0 0 1828 0 689 2088 3 9 78 102 0 207740 91300 88452 180984 0 0 1276 0 565 2182 7 6 83 43 1 207740 90124 89628 180984 0 0 1176 0 551 2219 2 7 91 04 2 207740 89240 90512 180984 0 0 880 520 443 907 22 10 67 05 3 207740 88056 91680 180984 0 0 1168 0 628 1248 12 11 77 04 2 207740 86852 92880 180984 0 0 1200 0 654 150567 87 06 1 207740 85736 93996 180984 0 0 1116 0 526 1512 5 10 85 00 1 207740 84844 94888 180984 0 0 892 0 438 1556 6 4 90 0根据观察值,我们可以得到以下结论:1,上下文切换数目高于中断数目,说明kernel中相当数量的时间都开销在上下文切换线程.2,大量的上下文切换将导致CPU 利用率分类不均衡.很明显实际上等待io 请求的百分比(wa)非常高,以及user time百分比非常低(us).3,因为CPU 都阻塞在IO请求上,所以运行队列里也有相当数目的可运行状态线程在等待执行.4.4 mpstat 工具的使用如果你的系统运行在多处理器芯片上,你可以使用mpstat 命令来监控每个独立的芯片.Linux 内核视双核处理器为2 CPU's,因此一个双核处理器的双内核就报告有4 CPU's 可用.mpstat 命令给出的CPU 利用率统计值大致和vmstat 一致,但是mpstat 可以给出基于单个处理器的统计值.# mpstat –P ALL 1Linux 2.4.21-20.ELsmp (localhost.localdomain) 05/23/200605:17:31 PM CPU %user %nice %system %idle intr/s05:17:32 PM all 0.00 0.00 3.19 96.53 13.2705:17:32 PM 1 1.12 0.00 12.73 86.15 13.2705:17:32 PM 2 0.00 0.00 0.00 100.00 0.0005:17:32 PM 3 0.00 0.00 0.00 100.00 0.004.5 案例学习: 未充分使用的处理量在这个例子中,为4 CPU核心可用.其中2个CPU 主要处理进程运行(CPU 0 和1).第3个核心处理所有内核和其他系统功能(CPU 3).第4个核心处于idle(CPU 2).使用top 命令可以看到有3个进程差不多完全占用了整个CPU 核心.# top -d 1top - 23:08:53 up 8:34, 3 users, load average: 0.91, 0.37, 0.13Tasks: 190 total, 4 running, 186 sleeping, 0 stopped, 0 zombieCpu(s): 75.2% us, 0.2% sy, 0.0% ni, 24.5% id, 0.0% wa, 0.0% hi, 0.0%siMem: 2074736k total, 448684k used, 1626052k free, 73756k buffersSwap: 4192956k total, 0k used, 4192956k free, 259044k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND15957 nobody 25 0 2776 280 224 R 100 20.5 0:25.48 php15959 mysql 25 0 2256 280 224 R 100 38.2 0:17.78 mysqld15960 apache 25 0 2416 280 224 R 100 15.7 0:11.20 httpd15901 root 16 0 2780 1092 800 R 1 0.1 0:01.59 top1 root 16 0 1780 660 572 S 0 0.0 0:00.64 init# mpstat –P ALL 1Linux 2.4.21-20.ELsmp (localhost.localdomain) 05/23/200605:17:31 PM CPU %user %nice %system %idle intr/s05:17:32 PM all 81.52 0.00 18.48 21.17 130.5805:17:32 PM 0 83.67 0.00 17.35 0.00 115.3105:17:32 PM 2 0.00 0.00 16.33 84.66 2.0105:17:32 PM 3 79.59 0.00 21.43 0.00 0.0005:17:32 PM CPU %user %nice %system %idle intr/s05:17:33 PM all 85.86 0.00 14.14 25.00 116.4905:17:33 PM 0 88.66 0.00 12.37 0.00 116.4905:17:33 PM 1 80.41 0.00 19.59 0.00 0.0005:17:33 PM 2 0.00 0.00 0.00 100.00 0.0005:17:33 PM 3 83.51 0.00 16.49 0.00 0.0005:17:33 PM CPU %user %nice %system %idle intr/s05:17:34 PM all 82.74 0.00 17.26 25.00 115.3105:17:34 PM 0 85.71 0.00 13.27 0.00 115.3105:17:34 PM 1 78.57 0.00 21.43 0.00 0.0005:17:34 PM 2 0.00 0.00 0.00 100.00 0.0005:17:34 PM 3 92.86 0.00 9.18 0.00 0.0005:17:34 PM CPU %user %nice %system %idle intr/s05:17:35 PM all 87.50 0.00 12.50 25.00 115.3105:17:35 PM 0 91.84 0.00 8.16 0.00 114.2905:17:35 PM 1 90.82 0.00 10.20 0.00 1.0205:17:35 PM 2 0.00 0.00 0.00 100.00 0.0005:17:35 PM 3 81.63 0.00 15.31 0.00 0.00你也可以使用ps 命令通过查看PSR 这列,检查哪个进程在占用了哪个CPU. # while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep 'mysqld'; sleep 1;donePID NI PRI %CPU PSR COMMAND15775 0 15 86.0 3 mysqldPID NI PRI %CPU PSR COMMAND15775 0 14 94.0 3 mysqldPID NI PRI %CPU PSR COMMAND15775 0 14 96.6 3 mysqldPID NI PRI %CPU PSR COMMAND15775 0 14 98.0 3 mysqldPID NI PRI %CPU PSR COMMAND15775 0 14 98.8 3 mysqldPID NI PRI %CPU PSR COMMAND15775 0 14 99.3 3 mysqld4.6 结论监控CPU 性能由以下几个部分组成:1,检查system的运行队列,以及确定不要超出每个处理器3个可运行状态线程的限制.2,确定CPU 利用率中user/system比例维持在70/303,当CPU 开销更多的时间在system mode,那就说明已经超负荷并且应该尝试重新调度优先级4,当I/O 处理得到增长,CPU 范畴的应用处理将受到影响。