(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. Kubernetes 基本概念介绍

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展. 如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成 ...

  2. 为什么要使用ConcurrentHashMap

    好久没写过技术性文章了,还是要坚持下去.掌握的知识,能写出来或者是讲给别人听才是真正的掌握了知识,如果不善于给别人讲,实际上还是没有真正掌握相关的知识,挑个简单的写吧. 面试的时候经常会被问到hash ...

  3. Linux下搭建iSCSI共享存储的方法 TGT 方式 CentOS6.9系统下

    iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...

  4. sed、awk命令速查

    awk与sed.grep一样都是为了加工数据流而做成的文本加工过滤器命令.awk会事先把输入的数据根据字段单位进行分割.在没有指定分割单位的情况下,以输入数据中的空格或Tab为分隔符.与sed相比,它 ...

  5. 【概率论】6-2:大数定理(The Law of Large Numbers)

    title: [概率论]6-2:大数定理(The Law of Large Numbers) categories: - Mathematic - Probability keywords: - Ma ...

  6. YII框架的依赖注入容器

    依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象. 所谓的依赖就是,一个对象,要使用另外一个对象才能完成某些功能.那么这个对象就 ...

  7. YII框架的事件机制

    一.什么是事件机制 解释:发生了一件事情,然后某些东西对这件事作出反应. 例子:假设发生了A同学结婚事件,然后B同学给份子钱反应,那么,B是怎么知道(监听)A事件的发生了呢,有两种办法. 扫描式:B不 ...

  8. ICEM——倒角的处理

    原视频下载地址: https://pan.baidu.com/s/1miHMOuk 密码: knc4

  9. Ubuntu安装邮件服务器

    Ubuntu搭建邮件服务器 此文我们使用Postfix来搭建邮箱服务器,Postifx是一个SMTP服务器.SMTP服务器也被称为MTA(message transfer agent) 一.安装pos ...

  10. SSH项目中使用struts-tags报错According to TLD or attribute directive in tag file, attribute test does not accept any expressions

    在运行struts2标签页面时报错,代码如下:<%@ page language="java" pageEncoding="gbk"%><%@ ...