(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. Nginx一个server配置多个location(使用alias)

    公司测试环境使用nginx部署多个前端项目.网上查到了两个办法: 在配置文件中增加多个location,每个location对应一个项目比如使用80端口,location / 访问官网: locati ...

  2. 瀑布流(基于Django)

    # 后端 from django.shortcuts import render, HttpResponse from django.http import JsonResponse from app ...

  3. Flask - 请求响应 | session | 闪现 | 请求扩展 | 中间件

    请求响应 flask的请求信息都在request里 flask的响应方式有四剑客,也可以自定义响应 请求相关信息 # request.method 提交的方法 # request.args get请求 ...

  4. linux下Boost序列化问题解决

    由于项目需要,要使用boost,所以在网上找了一些例子帮助理解,其中遇到很多问题,再次总结记录一下.#include <boost/archive/text_oarchive.hpp> # ...

  5. scanf()函数的调用:编写求正方形面积的通用程序

    #include<stdio.h>void main(){ int a, area; scanf("%d",&a); //等待用户从键盘输入一个整数// are ...

  6. 【JS】基础知识

    引言 在互联网的演化过程中,网页制作是Web1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以浏览为主. 2005年以后,互联网进入了Web2.0时代,各类似桌面软件的Web应用大 ...

  7. redis堵死致数据清空

    情景: zy的链路监控突然都恢复,而且在哪个时间段zabbix中显示回复,也发送了告警,但是实际上告警并没有发出来.这是不可能的情况,应该是redis缓存中的数据都被清空了,没有认为干预,需解决问题 ...

  8. loj #10131

    抽离题意 求删除一条树边和一条非树边后将图分成不连通的两部分的方案数 对于一棵树,再加入一条边就会产生环.若只有一个环,说明只加入了一条非树边 (x, y),记 lca 为 l, 那么 对于任意一条 ...

  9. Angular发送广播和接收广播

    home.module.ts import {BroadcastService} from "../broadcast.service"; @NgModule({ imports: ...

  10. [golang]golang如何覆盖输出console,实现进度条;golang一个骚气的进度提示库

    [golang]golang如何覆盖输出console,实现进度条 package main import( "fmt" "os" "time&quo ...