Linux系统调优分析

Linux系统调优分析

1、有关CPU调优分析

cpu处理方式:

1.批处理,顺序处理请求。(切换次数少,吞吐量大)

2.分时处理。(如同"独占",吞吐量小)(时间片,把请求分为一个一个的时间片,一片一片的分给CPU处理)我们现在使用x86就是这种架构

3.实时处理:一般用于单片机上,比如电梯的上下控制,对于按键等动作要求进行实时处理。

我们可以通过查看/boot/config查看一下内核一秒钟中断CPU次数,/boot/config-3.10.0-327.el7.x86_64是编译内核的参数文件。

[root@centos ~]# grep HZ /boot/config-3.10.0-327.el7.x86_64 
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
# CONFIG_NO_HZ_IDLE is not set
CONFIG_NO_HZ_FULL=y
# CONFIG_NO_HZ_FULL_ALL is not set
CONFIG_NO_HZ=y
# CONFIG_RCU_FAST_NO_HZ is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000		#1秒钟1000次中断
CONFIG_MACHZ_WDT=m

调整进程优先级使用更多的CPU

调整进程nice值,让进程使用更多的cpu

优先级控制:nice值作用:以什么优先级运行进程。默认优先级是0 #范围 -20~19 越小优先级越高 普通用户0-19
[root@centos ~]# vim 1.txt
在另一个终端
[root@centos ~]# ps aux | grep vim
root       5053  0.1  0.1 151444  5196 pts/0    S+   18:07   0:00 vim 1.txt
root       5056  0.0  0.0 112644   952 pts/2    S+   18:08   0:00 grep --color=auto vim
可以查看默认nice值为0
[root@centos ~]# top -p 5053
top - 18:08:28 up  5:06,  3 users,  load average: 0.01, 0.02, 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 :  3866948 total,  3225192 free,   166468 used,   475288 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  3467116 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND      
  5053 root      20   0  151444   5196   2588 S   0.0  0.1   0:00.04 vim 


[root@centos ~]# nice -n -5 vim 1.txt
在另一个终端
[root@centos ~]# ps aux | grep vim
root       5058  0.2  0.1 151444  5196 pts/0    S<+  18:09   0:00 vim 1.txt
root       5062  0.0  0.0 112644   952 pts/2    S+   18:09   0:00 grep --color=auto vim
[root@centos ~]# top -p 5058
top - 18:09:24 up  5:07,  3 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.1 sy,  0.0 ni, 99.8 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3866948 total,  3224852 free,   166824 used,   475272 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  3466776 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND      
  5058 root      15  -5  151444   5196   2588 S   0.0  0.1   0:00.04 vim
这里可以看到nice值已经修改为-5

修改正在运行的进程nice值 
Usage: renice -n 【nice值】 PID
[root@centos ~]# renice -n -10 5058
5058 (process ID) old priority -5, new priority -10

CPU亲和力(affinity):将一个或多个进程绑定到一个或多个处理器上运行

taskset 作用:在多核情况下,可以认为指定一个进程在哪颗CPU上执行程序,减少进程在不同CPU之前切换的开销。
查看物理cpu数量:
[root@centos ~]# cat /proc/cpuinfo  | grep "physical id" | sort -u | wc -l
2
查看每个物理cpu有几核心:
[root@centos ~]# cat /proc/cpuinfo  | grep "cores" | uniq
cpu cores	: 2
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]
Options:
 -a, --all-tasks         将一个进程中所有的TID都执行一次CPU亲和性设置
 -p, --pid               操作已存在的PID
 -c, --cpu-list          声明CPU的亲和力使用数字表示
         
[root@centos ~]# vim 1.txt &
[1] 6076
[root@centos ~]# taskset -p 6076
pid 6076's current affinity mask: f	#f说明这个进程在4颗cpu上随机切换
[1]+  Stopped                 vim 1.txt
值的计算方法
Cpu ID 号码,对应的16进制数为: 
	CPU ID:              7      6      5      4      3      2      1      0
	对应的数为:         128     64   	32    	16     8     4     	 2     	 1
我这里4核 CPU ID即为 0,1,2,3   值为(1+2+4+8=15对应16进制数为f)
[root@centos ~]# taskset -cp 6076
可以查看到此进程在所有cpu上运行
pid 6076's current affinity list: 0-3

指定进程运行的cpu
[root@centos ~]# taskset -c 1,3 vim 1.txt &
[1] 6141
[root@centos ~]# taskset -p 6141
pid 6141's current affinity mask: a
[root@centos ~]# taskset -cp 6141
pid 6141's current affinity list: 1,3

CPU利用比率分配

如果一个CPU充分被使用:

65% ­ 70% User Time 用户态

30% ­ 35% System Time 内核态

0% ­ 5% Idle Time 空闲

Context Switches­ 上下文切换的数目直接关系到CPU 的使用率,如果CPU 利用率保持在上述均衡状态时,有大量的上下文切换是正常的。

扫描二维码关注公众号,回复: 11007042 查看本文章
[root@centos ~]# 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
 1  0      0 3221672    952 478732    0    0     2     1   17   28  0  0 100  0  0
 0  0      0 3221780    952 478732    0    0     0     0   76  119  0  0 100  0  0
 0  0      0 3221780    952 478732    0    0     0     0   69  106  0  0 100  0  0
 
如果有大量的中断(in)和较少的上下文切换(cs)。这意味着一个单一的进程正在大量使用cpu
如果上下文切换数目高于中断数目,说明kernel中相当数量的时间都开销在:上下文切换线程.
大量的上下文切换将导致CPU 利用率不均衡,如果等待io 请求的百分比(wa)非常高,以及user time百分比非常低(us).  说明磁盘比较慢,磁盘是瓶颈、因为CPU 都阻塞在IO请求上,所以运行队列里也有相当数个的可运行状态线程在等待执行.

2、有关I/O

资源限制:/etc/security/limits.conf

#<domain>      <type>  <item>         <value>
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
soft软限制是一个警告值,而hard硬限制则是一个真正意义的阀值,超过就会报错。soft一定要比hard小。
显示目前资源限定
[root@centos ~]# ulimit -a
core file size          (blocks, -c) 0	设定core文件的最大值,单位为区块
data seg size           (kbytes, -d) unlimited	程序数据节区的最大值,单位为KB
scheduling priority             (-e) 0	
file size               (blocks, -f) unlimited	shell所能建立的最大文件,单位为区块
pending signals                 (-i) 15023	
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited	指定可使用内存的上限,单位为KB
open files                      (-n) 1024	指定同一时间最多可打开的文件数
pipe size            (512 bytes, -p) 8	指定管道缓冲区的大小,单位512字节
POSIX message queues     (bytes, -q) 819200	
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192	指定堆叠的上限,单位为KB
cpu time               (seconds, -t) unlimited	指定CPU使用时间的上限,单位为秒
max user processes              (-u) 15023	用户最多可启动的进程数目
virtual memory          (kbytes, -v) unlimited	指定可使用的虚拟内存上限,单位为KB
file locks                      (-x) unlimited

Linux系统里打开文件描述符的最大值,一般缺省值是1024
[root@centos ~]# ulimit -n
1024

硬盘速度测试

测试速度
[root@centos ~]# hdparm -T -t /dev/sda

/dev/sda:
 Timing cached reads:   17000 MB in  2.00 seconds = 8506.81 MB/sec
#2秒中直接从内存的 cache读取数据的速度读
 Timing buffered disk reads: 162 MB in  3.01 seconds =  53.81 MB/sec
#3.01秒中从硬盘缓存中读 
 
-a<快取分区> 设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。
-A<0或1> 启动或关闭读取文件时的快取功能。
-c 设定IDE32位I/O模式。
-C 检测IDE硬盘的电源管理模式。
-d<0或1> 设定磁盘的DMA模式。
-f 将内存缓冲区的数据写入硬盘,并清楚缓冲区。
-g 显示硬盘的磁轨,磁头,磁区等参数。
-h 显示帮助。
-i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
-I 直接读取硬盘所提供的硬件规格信息。
-k<0或1> 重设硬盘时,保留-dmu参数的设定。
-K<0或1> 重设硬盘时,保留-APSWXZ参数的设定。
-m<磁区数> 设定硬盘多重分区存取的分区数。
-n<0或1> 忽略硬盘写入时所发生的错误。
-p 设定硬盘的PIO模式。
-P<磁区数> 设定硬盘内部快取的分区数。
-q 在执行后续的参数时,不在屏幕上显示任何信息。
-r<0或1> 设定硬盘的读写模式。
-S<时间> 设定硬盘进入省电模式前的等待时间。
-t 评估硬盘的读取效率。
-T 评估硬盘快取的读取效率。
-u<0或1> 在硬盘存取时,允许其他中断要求同时执行。
-v 显示硬盘的相关设定。
-W<0或1> 设定硬盘的写入快取。
-X<传输模式> 设定硬盘的传输模式。
-y 使IDE硬盘进入省电模式。
-Y 使IDE硬盘进入睡眠模式。
-Z 关闭某些Seagate硬盘的自动省电功能。

3、网络相关

修改内核参数
[root@centos ~]# vim /etc/sysctl.conf
net.ipv4.tcp_synack_retries = 0	#tcp回应第二个握手包(SYN+ACK),如果收不到第三次握手包(ACK),不进行重试。
net.ipv4.tcp_syn_retries = 1	#当没有收到服务器的SYN+ACK包时,客户端重发SYN握手包的次数。
net.ipv4.tcp_max_syn_backlog = 20480	#半连接队列长度,增加SYN队列长度到20480:加大SYN队列长度可以容纳更多等待连接的网络连接数
net.ipv4.tcp_syncookies = 1	#当出现 半连接 队列溢出时向对方发送syncookies
	原理:在Tcp服务器收到Tcp Syn包并返回Tcp Syn+ack包时,不专门分配一个数据区,而是根据这个Syn包计算出一个cookie值。在收到Tcp ack包时,Tcp服务器在根据那个cookie值检查这个Tcp ack包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。 
默认为0,1表示开启
net.ipv4.tcp_tw_reuse = 1	#表示开启重用。允许将TIME_WAIT sockets重新用于新的TCP连接,默认为0,表示关闭e
net.ipv4.tcp_tw_recycle = 1	#表示开启TCP连接中TIME_WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_fin_timeout = 10	#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN_WAIT_2状态的时间
fs.file-max = 819200	#系统允许的文件句柄的最大数目,因为连接需要占用文件句柄
net.core.somaxconn = 65535	#表示socket监听的backlog上限
net.core.rmem_max = 1024123000	#最大的TCP 数据接受缓冲(字节)
net.core.wmem_max = 16777126	#最大的TCP 数据发送缓冲(字节)
net.core.netdev_max_backlog = 165536	#当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值
net.ipv4.ip_local_port_range = 10000 65535	#表示允许系统打开的端口范围
[root@centos ~]# sysctl -p
调整mtu
[root@centos ~]# ifconfig  | grep -i mtu
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
调整mtu
ifconfig 【网卡名】 mtu 【数值】
MTU,即Maximum Transmission Unit(最大传输单元),此值设定TCP/IP协议传输数据报时的最大传输单元。
系统与ISP之间MTU的不符就会直接导致数据在网络传输过程中不断地进行分包、组包,浪费了宝贵的传输时间,也严重影响了宽带的工作效率。
网卡绑定https://blog.csdn.net/DoloresOOO/article/details/84438347
发布了65 篇原创文章 · 获赞 48 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/DoloresOOO/article/details/100577725