(1).系统调优思路

  性能优化就是找到系统处理中的瓶颈以及去除这些的过程,性能优化其实是对OS 各子系统达到一种平衡的定义。具体步骤如下:

  1. 系统的运行状况:  CPU -> MEM  -> DISK->  NETWORK -> application

  2. 分析是否有瓶颈(依据当前应用需求)

  3. 调优(采取一定措施使变得优异)

  这些子系统之间关系是相互彼此依赖的,任何一个高负载都会导致其他子系统出现问题.比如:

    大量的网页调入请求导致内存队列的拥塞;

    网卡的大吞吐量可能导致更多的 CPU 开销;

    大量的 CPU 开销又会尝试更多的内存使用请求;

    大量来自内存的磁盘写请求可能导致更多的 CPU 以及 IO 问题;

  所以要对一个系统进行优化,查找瓶颈来自哪个方面是关键,虽然看似是某一个子系统出现问题,其实有可能是别的子系统导致的。调优就像医生看病,因此需要你对服务器所有地方都了解清楚。

(2).查看CPU负载相关工具

 1)uptime

[root@youxi1 ~]# uptime
14:57:14 up 45 min, 1 user, load average: 0.00, 0.01, 0.05

  说明如下:

14:57:14 当前系统时间
up 45 min 系统运行时间
1 user 当前登录用户数
load average: 0.00, 0.01, 0.05
平均负载,即任务队列的平均长度。三个数值分别是:1分钟前、5分钟前、15分钟前到现在的平均值

  详细查看:Linux命令之uptime

 2)top

  输入top命令,按下大写的P,可以使输出按照CPU的使用率进行排序。top命令使用在CPU方面时,可以查看到CPU的各种信息,但更多的是用于找出使用CPU最多的程序。

  详细查看:Linux命令之top

 3)ps

  按照实际使用CPU,从大到小显示所有进程列表。可以用于找出使用CPU最多的程序

[root@youxi1 ~]# ps aux --sort -pcpu | more  //按CPU降序排序
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 125348 3780 ? Ss 14:12 0:01 /usr/lib/syste
md/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 14:12 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:12 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 14:12 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 14:12 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 14:12 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 14:12 0:00 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 14:12 0:00 [lru-add-drain
]
root 11 0.0 0.0 0 0 ? S 14:12 0:00 [watchdog/0]
root 13 0.0 0.0 0 0 ? S 14:12 0:00 [kdevtmpfs]
root 14 0.0 0.0 0 0 ? S< 14:12 0:00 [netns]
root 15 0.0 0.0 0 0 ? S 14:12 0:00 [khungtaskd]
root 16 0.0 0.0 0 0 ? S< 14:12 0:00 [writeback]
root 17 0.0 0.0 0 0 ? S< 14:12 0:00 [kintegrityd]
root 18 0.0 0.0 0 0 ? S< 14:12 0:00 [bioset]
root 19 0.0 0.0 0 0 ? S< 14:12 0:00 [kblockd]
root 20 0.0 0.0 0 0 ? S< 14:12 0:00 [md]
--More--

  注意:pcpu前面有减号是降序,没有减号是升序。

 4)mpstat

  这个命令需要安装,直接yum安装就好。

[root@youxi1 ~]# yum -y install sysstat
[root@youxi1 ~]# mpstat
Linux 3.10.0-862.el7.x86_64 (youxi1) 2019年07月29日 _x86_64_ (1 CPU) 17时01分17秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
17时01分17秒 all 0.13 0.00 0.25 0.05 0.00 0.00 0.00 0.00 0.00 99.56

  说明如下:

CPU 处理器编号,all表示统计信息计算为所有处理器之间的平均值
%usr 显示在用户级(应用程序)执行时发生的CPU利用率百分比。也叫用户态
%nice 显示以优先级较高的用户级别执行时发生的CPU利用率百分比。
%sys

显示在系统级(内核)执行时发生的CPU利用率百分比。也叫内核态

注意:这不包括维护硬件和软件的时间中断。

%iowait 显示系统具有未完成磁盘I / O请求的CPU或CPU空闲的时间百分比。
%irq 显示CPU或CPU用于服务硬件中断的时间百分比。
%soft 显示CPU或CPU用于服务软件中断的时间百分比。
%steal 显示在虚拟机管理程序服务另一个虚拟处理器时虚拟CPU或CPU无意中等待的时间百分比。
%guest 显示CPU或CPU运行虚拟处理器所花费的时间百分比。
%gnice 显示CPU或CPU运行来宾所花费的时间百分比。
%idle 显示CPU或CPU空闲且系统没有未完成的磁盘I / O请求的时间百分比。

  使用mpstat -P ALL查看所有CPU运行状态

[root@youxi1 ~]# mpstat -P ALL
Linux 3.10.0-862.el7.x86_64 (youxi1) 2019年07月30日 _x86_64_ (1 CPU) 11时11分19秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11时11分19秒 all 0.09 0.00 0.23 0.07 0.00 0.00 0.00 0.00 0.00 99.61
11时11分19秒 0 0.09 0.00 0.23 0.07 0.00 0.00 0.00 0.00 0.00 99.61

  使用mpstat 1 10命令查看CPU运行状态,1秒刷新1次,连续刷新10次

[root@youxi1 ~]# mpstat 1 10
Linux 3.10.0-862.el7.x86_64 (youxi1) 2019年07月30日 _x86_64_ (1 CPU) 11时13分39秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11时13分40秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11时13分41秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11时13分42秒 all 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
11时13分43秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11时13分44秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11时13分45秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11时13分46秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11时13分47秒 all 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
11时13分48秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
11时13分49秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: all 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.80

(3).查看CPU的信息

  cpu的信息存放在/proc/cpuinfo文件中

[root@youxi1 ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
stepping : 9
microcode : 0x12
cpu MHz : 3192.819
cache size : 6144 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm
constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt
tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm epb fsgsbase tsc_adjust smep dtherm ida arat pln pts
bogomips : 6385.63
clflush size : 64
cache_alignment : 64
address sizes : 42 bits physical, 48 bits virtual
power management:

  详细信息查看:https://blog.csdn.net/cuker919/article/details/7635488

(4).CPU资源的简单调优

 1)调整nice值改变进程优先级

  在Linux系统中,nice值的范围从-20到+19(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的优先级。具有最高优先级的程序,其nice值最低,所以在Linux系统中,值-20使得一项任务变得非常重要;与之相反,如果任务的nice为+19,则表示它是一个高尚的、无私的任务,允许所有其他任务比自己享有宝贵的CPU时间的更大使用份额,这也就是nice的名称的来意。默认优先级是0。

  可以在运行命令前,设置进程的nice值,让进程使用更多的CPU。nice -n [nice值] [完整命令]

[root@youxi1 ~]# nice -n -5 vim a.txt
//另外打开一个窗口,查看vim a.txt的nice值
[root@youxi1 ~]# ps aux | grep vim  //先查看vim a.txt的PID
root 1877 0.1 0.5 151560 5028 pts/0 S<+ 13:53 0:00 vim a.txt
root 1900 0.0 0.0 112720 980 pts/1 R+ 13:53 0:00 grep --color=auto vim
[root@youxi1 ~]# top -p 1877  //然后根据PID查看进程信息
top - 13:54:53 up 4:34, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 997956 total, 705368 free, 146968 used, 145620 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 689988 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1877 root 15 -5 151560 5028 2664 S 0.0 0.5 0:00.07 vim

  还可以使用renice修改当前进程的nice值。renice -n [nice值] [PID]

[root@youxi1 ~]# renice -n 6 1877
1877 (进程 ID) 旧优先级为 -5,新优先级为 6
[root@youxi1 ~]# top -p 1877
top - 14:01:33 up 4:41, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 997956 total, 705316 free, 146828 used, 145812 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 689964 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1877 root 26 6 151560 5028 2664 S 0.0 0.5 0:00.07 vim

 2)设置进程的CPU亲和力(指定进程运行在哪一个CPU上)

  这里我将主机的CPU改为单个4核,内存也调整为4G。

  使用的是taskset命令,安装的是util-linux。taskset在多核的情况下,可以指定进程在那个CPU上运行,减少进程在不同CPU之间切换的开销。

[root@youxi1 ~]# yum -y install util-linux
[root@youxi1 ~]# mpstat -P ALL
Linux 3.10.0-862.el7.x86_64 (youxi1) 2019年07月30日 _x86_64_ (4 CPU) 15时34分33秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
15时34分33秒 all 0.09 0.00 0.19 0.10 0.00 0.00 0.00 0.00 0.00 99.62
15时34分33秒 0 0.08 0.00 0.25 0.10 0.00 0.00 0.00 0.00 0.00 99.57
15时34分33秒 1 0.10 0.00 0.22 0.16 0.00 0.00 0.00 0.00 0.00 99.52
15时34分33秒 2 0.14 0.00 0.18 0.07 0.00 0.00 0.00 0.00 0.00 99.61
15时34分33秒 3 0.05 0.00 0.11 0.08 0.00 0.00 0.00 0.00 0.00 99.76

  指定命令运行在第2个CPU上(CPU编号为1)。taskset -c [CPU编号] [完整命令]

[root@youxi1 ~]# taskset -c 1 vim a.txt
//另外打开一个窗口,查看vim a.txt运行的CPU
[root@youxi1 ~]# ps aux | grep vim
root 1528 0.5 0.1 151548 5048 pts/0 S+ 15:49 0:00 vim a.txt
root 1556 0.0 0.0 112720 980 pts/1 S+ 15:50 0:00 grep --color=auto vim
[root@youxi1 ~]# taskset -cp 1528
pid 1528's current affinity list: 1

  查看进程运行在哪几个CPU上。taskset -cp [PID]

[root@youxi1 ~]# ps axu | grep sshd
root 1143 0.0 0.1 112796 4288 ? Ss 14:52 0:00 /usr/sbin/sshd -D
root 1460 0.0 0.1 161396 6016 ? Ss 15:26 0:00 sshd: root@pts/0
root 1562 0.0 0.0 112720 980 pts/0 S+ 15:55 0:00 grep --color=auto sshd
[root@youxi1 ~]# taskset -cp 1143
pid 1143's current affinity list: 0-3
[root@youxi1 ~]# taskset -cp 1460
pid 1460's current affinity list: 0-3

  当然也可以设置命令在多个CPU上运行,CPU编号之间用逗号隔开。

[root@youxi1 ~]# taskset -c 1,3 vim b.txt
//另外打开一个窗口,查看vim b.txt运行的CPU
[root@youxi1 ~]# ps aux | grep vim
root 1566 0.3 0.1 151560 5028 pts/0 S+ 15:59 0:00 vim b.txt
root 1589 0.0 0.0 112720 984 pts/1 S+ 15:59 0:00 grep --color=auto vim
[root@youxi1 ~]# taskset -cp 1566
pid 1566's current affinity list: 1,3

  

Linux系统调优——CPU(一)的更多相关文章

  1. Linux系统调优1

    Linux在进行系统调优的时候,首先要考虑整个操作系统的结构,然后针对各个部分进行优化,下面展示一个Linux系统的各个组成部分: 有上图可以看出,我们可以调整的有应用程序,库文件,内核,驱动,还有硬 ...

  2. Linux系统调优相关工具

    一.系统调优概述 系统的运行状况: CPU -> MEM -> DISK*-> NETWORK -> 应用程序调优 分析是否有瓶颈(依据当前应用需求) 调优(把错误的调正确) ...

  3. linux系统调优工具

    系统调优思路 性能优化就是找到系统处理中的瓶颈以及去除这些的过程,性能优化其实是对 OS 各子系统达到一种平衡的定义.具体步骤如下: 1. 系统的运行状况: CPU -> MEM -> D ...

  4. Linux系统调优

    Linux核心参数都是放置在/proc下面:系统的参数都是放置在/proc/sys swap最好放置在运行最快的硬盘上面,但是swap并能取代ram,因为并有I/O上面的损耗,所以优先考虑检验内存没有 ...

  5. Linux系统调优——内核相关参数(五)

    修改内核参数有3种办法:一种临时修改,两种永久修改. 临时修改是使用sysctl [选项] [参数名=值]命令:永久修改是修改/etc/sysctl.conf文件或修改/proc/sys/目录下的对应 ...

  6. Linux系统调优——磁盘I/O(三)

    (1).查看I/O运行状态相关工具 1)查看文件系统块大小 对于ext4文件系统,查看文件系统块大小 [root@CentOS6 ~]# tune2fs -l /dev/sda1 | grep siz ...

  7. 1.linux系统调优

    首先来说调优是一门黑色艺术,使用来满足人的感知,通过人的感觉来进行配置,达到让人感觉操作系统速度很块的感觉. 操作系统拥有四个瓶颈:cpu,内存,网络,磁盘.调优主要是对上述四个子系统进行配置优化,其 ...

  8. Linux系统调优——网络(四)

    (1).查看网络(Network)运行状态相关工具 1)nload监控总体带宽使用情况 nload需要自己安装,而且在安装前需要安装epel-release [root@youxi1 ~]# yum ...

  9. Linux系统调优——Memory内存(二)

    (1).查看Memory(内存)运行状态相关工具 1)free命令查看内存使用情况 [root@youxi1 ~]# free -m //-m选项,以MB为单位显示 total used free s ...

随机推荐

  1. 模拟赛 怨灵退治 题解(Hall定理+线段树)

    题意: 有 n 群怨灵排成一排,燐每秒钟会选择一段区间,消灭至多 k 只怨灵. 如果怨灵数量不足 k,则会消灭尽量多的怨灵. 燐作为一只有特点的猫,它选择的区间是不会相互包含的.它想要知道它每秒最多能 ...

  2. MySQL UTF8 转为 utf8mb4

    https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4 How to support full Unicode in MySQL da ...

  3. codevs6003一次做对算我输

    6003 一次做对算我输 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 大师 Master       题目描述 Description 更新数据了!!!!!!!更新数据了!!!!!! ...

  4. python 之 字典常用操作

  5. 洛谷P5017摆渡车

    题目 一道做法多种多样的题,DP做法的状态也很多. 我用\(dp[i]\)表示在第i秒发车的时间和,然后dp方程就很好写了 \(dp[i] = dp[j] + i车的等待时间\)j属于i-2m ~ i ...

  6. golang-切片

    切片练习 package main import "fmt" /*func main() { arr := [10]int {1, 2, 3, 4, 5, 6, 7, 8, 9, ...

  7. MySQL 基础之一

    为了满足关系范式:通常一个大的数据集会拆成在一个库(集合内)中多张表表来存储,每一张表就是由行和列组成的二维关系,表与表之间也有关系,查询有时候需要做表链接,而表链接这个过程需要依赖于索引到各种算法来 ...

  8. Note_4.1

    2019/4/1 奇奇怪怪的笔记 多项式除法 问题描述 给定\(n\)次多项式\(A(x)\)和\(m\)次多项式\(B(x)\) 求: \[ A(x)=B(x)*C(x)+R(x) \] 我们要求\ ...

  9. Java 学习之路(2)程序基本要素

    编写一个程序,基本要素包括:标识符.关键字.注释.修饰符.块.语句.类和main()方法. 标识符 概念 在Java语言中:标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 标识符组成 ...

  10. CSS Sticky 其实很简单

    为什么要写这篇文章 Sticky 也不是新知识点了,写这篇文章的原因是由于最近在实现效果的过程中,发现我对 Sticky 的理解有偏差,代码执行结果不如预期.决定写篇文章重新学习一次. 什么是 Sti ...