12.1.2 查看CPU一分钟有多少个次切换
查看内核一秒中断CPU 次数 注意此文件是编译内核的参数文件
12.1.3 调整进程优先级使用更多CPU
优先级控制
nice 值 # 范围 -20 ~ 19 越小优先级越高,普通用户是0~19
nice
作用; 以什么优先级运行进程,默认优先级是0
语法:nice -n 优先级数字, 命令
[root@xuegod2 ~]# nice -n -5 vim a.txt
top -p 65142
修改进程号 renice -n 5 65142
[root@xuegod2 ~]# renice -n 20 65142
65142 (进程 ID) 旧优先级为 5,新优先级为 19
[root@xuegod2 ~]# renice -n -21 65142
65142 (进程 ID) 旧优先级为 19,新优先级为 -20
12.1.4 CPU 亲和力
taskset 作用 : 在多核情况下,可以认为指定一个进程在哪个CPU上执行程序,减少进程在不同CPU之前的开销
安装
[root@xuegod2 ~]# rpm -qf `which taskset`
util-linux-2.23.2-59.el7.x86_64
语法: taskset -c N 命令
[root@xuegod2 ~]# taskset -c 0 vim a.txt 1号CPU id 是0
[root@xuegod2 ~]# ps -aux | grep a.txt
root 65406 0.0 0.2 151832 5412 pts/0 S+ 14:53 0:00 vim a.txt
root 65417 0.0 0.0 112724 1000 pts/1 S+
[root@xuegod2 ~]# taskset -p 65406 #-p 要查看进程IP
pid 65406's current affinity mask: 1 # CPU亲和力掩码,1 代码第一个CPU核心
例子2 查sshd 进程运行在哪几个CPU上
[root@xuegod2 ~]# ps -aux | grep sshd
root 7416 0.0 0.2 112756 4356 ? Ss 11:51 0:00 /usr/sbin/sshd -D 这个才是他的进程
root 8136 0.0 0.2 160848 5616 ? Ss 11:52 0:01 sshd: root@pts/0
root 65151 0.0 0.2 160848 5608 ? Ss 14:35 0:00 sshd: root@pts/1
root 65527 0.0 0.0 112728 988 pts/1 S+ 15:01 0:00 grep --color=auto sshd
[root@xuegod2 ~]# taskset -p 7416
pid 7416's current affinity mask: f 说明sshd 在4个CPU上随机进行切换
[root@xuegod2 ~]# taskset -c 1,3 vim a.txt
[root@xuegod2 ~]# ps -aux | grep a.txt
root 65578 0.2 0.2 151832 5412 pts/0 S+ 15:08 0:00 vim a.txt
root 65582 0.0 0.0 112724 1000 pts/1 S+ 15:08 0:00 grep --color=auto a.txt
[root@xuegod2 ~]# taskset -p 65578
pid 65578's current affinity mask: a
# a 为十进制的10=2+8
注意: 在哪个CPU上运行,哪一个为1
12.1.5 CPU 性能监控
理解运行队列,利用率,上下文切换读怎么样CPU性能最优化之间的关系,早期提及性能是相对于准线数据的
在一些系统中,通常预期所达到的性能包括
Run Queues -每个处理器应该运行队列不超过1-3个线程
例子 一个双核处理器队列不要超过6个
注意 有两个特殊的进程永远在队列中待着,当前进程和进程idle
12. 1.6 CPU 利用率比例分配
例1 : 持续的CPU利用率
在这个例子中,这个系统的CPU充分利用
[root@xuegod2 ~]# vmstat 1 10 本机为单核CPU ,执行vmstat 显示一下内容
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 85004 192 1442404 0 0 14 27 28 32 0 0 99 0 0
0 0 0 84872 192 1442404 0 0 0 0 76 110 0 0 100 0 0
0 0 0 84872 192 1442404 0 0 0 0 49 84 0 0 100 0 0
0 0 0 84880 192 1442404 0 0 0 0 53 87 0 0 100 0 0
0 0 0 84880 192 1442404 0 0 0 0 49 82 0 0 100 0 0
0 0 0 84880 192 1442404 0 0 0 0 94 123 0 0 100 0 0
0 0 0 84880 192 1442404 0 0 0 0 70 95 0 0 100 0 0
0 0 0 84880 192 1442404 0 0 0 0 55 92 0 0 100 0 0
0 0 0 84880 192 1442404 0 0 0 0 48 81 0 0 100 0 0
0 0 0 84880 192 1442404 0 0 0 0 55 97 0 0 100 0 0
root@xuegod2 ~]# vmstat 1 在这个例子中,内核调度中的上下文切换处于饱和
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 85004 192 1442404 0 0 14 26 27 31 0 0 99 0 0
0 0 0 85004 192 1442404 0 0 0 0 65 75 0 0 100 0 0
0 0 0 85012 192 1442404 0 0 0 0 36 51 0 0 100 0 0
0 0 0 85012 192 1442404 0 0 0 0 30 46 0 0 100 0 0
0 0 0 85012 192 1442404 0 0 0 0 31 50 0 0 100 0 0
0 0 0 85012 192 1442404 0 0 0 0 35 49 0 0 100 0 0
0 0 0 85012 192 1442404 0 0 0 0 77 85 0 0 100 0 0
0 0 0 85012 192 1442404 0 0 0 0 28 44 0 0 100 0 0
0 0 0 85012 192 1442404 0 0 0 0 30 47 0 0 100
根据观察值,得出,我们可以得到一下结论
1 ,上下文切换数据高于终端数据,说明内核中有相当数量的时间在都在开销
在上下文切换进程
12.2 有关内存的调优
有关内存的调优
12.2.1 内存调优相关内容
关于内存,一般情况下,不用调优,我们在这里分析一下情况
BUFFER inode 节点索引缓存,缓存 写时用,先写入到内存
CACHE block 块 页面缓存,块取 读时用,先读入到内存 中
buffer 缓存从磁盘读出的内容 这种理解是片面的
cached 缓存需要写入的内容 这种理解是片面的
[root@xuegod2 ~]# free
total used free shared buff/cache available
Mem: 2028116 498012 87620 10532 1442484 1231072
Swap: 2097148 0 2097148
[root@xuegod2 ~]# echo 3 >/proc/sys/vm/drop_caches
[root@xuegod2 ~]# free
total used free shared buff/cache available
Mem: 2028116 419820 1420524 10532 187772 1403736
Swap: 2097148 0 2097148
[root@xuegod2 ~]#
使用find /
[root@xuegod2 ~]# vmstat
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 1415364 0 192664 0 0 12 23 25 29 0 0 99 0 0
[root@xuegod2 ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 411M 1.3G 10M 190M 1.3G
Swap: 2.0G 0B 2.0G
[root@xuegod2 ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 413M 1.3G 10M 245M 1.3G
Swap: 2.0G 0B 2.0G
[root@xuegod2 ~]# vmstat
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 1305536 0 261404 0 0 13 23 26 30 0 0 99 0 0
使用 grep aaa / -R
[root@xuegod2 ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 479M 1.1G 10M 401M 1.2G
Swap: 2.0G 0B 2.0G
[root@xuegod2 ~]# vmstat
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 1126848 0 410696 0 0 15 23 26 30 0 0 99 0 0
echo 3 >/proc/sys/vm/drop_caches 清理内存
CACHE : 页缓存,内存页 一页尺寸,4kb
对象文件系统,块block 1 kb 2 kb 4kb
扇区
sectors 512b
手动情况buffer 和cache
[root@xuegod2 ~]# cat /proc/sys/vm/drop_caches
3
[root@xuegod2 ~]# free
total used free shared buff/cache available
Mem: 2028116 492360 1125084 10532 410672 1275384
Swap: 2097148 0 2097148
[root@xuegod2 ~]# sync # 把内存中的数据写入磁盘中
[root@xuegod2 ~]# echo 1 >/proc/sys/vm/drop_caches
[root@xuegod2 ~]# free
total used free shared buff/cache available
Mem: 2028116 492560 1268496 10532 267060 1285960
Swap: 2097148 0 2097148
12.3 I/O 调优 相关内容
12.3.1 资源限制
12.3.1 资源限制
例子1 永久修改一个进程可以打开的最大文件数
限制用户资源配置文件, vim /etc/security/limits.conf 是模块pam_limits.so 的配置文件
pam 相关配置文件
/lib64/security/ #pam 模块所在目录
/etc/security/ # pam 每个模块的配置文件
/etc/pam.d / 使用pam 功能的服务和应用程序的配置文件
重启系统才能生效
2 启动系统,reboot 永久生效的缺点是必须是重启系统
3 检查
可以临时生效
ulimit -n 100000
[root@xuegod2 ~]# grep pam_limits.so /etc/pam.d/ -R
例2 : nproc 用户可以打开的最大进程数
[root@xuegod2 ~]# vim /etc/security/limits.conf
* soft nproc 66666
* hard nproc 66666
重启reboot
[root@xuegod2 ~]# ulimit -u 66666 临时修改
[root@xuegod2 ~]# ulimit -u
66666
[root@xuegod2 ~]#
[root@xuegod2 ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7798
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024000 最大打开的文件数
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 66666 最大的用户进程数
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
测试硬盘的速度
yum install hdparm -y
[root@xuegod2 ~]# hdparm -T -t /dev/sda
/dev/sda:
Timing cached reads: 13388 MB in 2.00 seconds = 6707.36 MB/sec
Timing buffered disk reads: 506 MB in 3.00 seconds = 168.47 MB/sec
[root@xuegod2 ~]# dd if=/dev/zero of=/test.dbf bs=8k count=3000
记录了3000+0 的读入
记录了3000+0 的写出
24576000字节(25 MB)已复制,0.063316 秒,388 MB/秒
[root@xuegod2 ~]# hdparm -T -t /dev/sda
/dev/sda:
Timing cached reads: 12418 MB in 2.00 seconds = 6221.39 MB/sec
Timing buffered disk reads: 774 MB in 3.01 seconds = 257.30 MB/sec
time 命令
[root@xuegod2 ~]# time dd if=/dev/zero of=/test.dbf bs=8k count=3000
记录了3000+0 的读入
记录了3000+0 的写出
24576000字节(25 MB)已复制,0.0437245 秒,562 MB/秒
real 0m0.048s
user 0m0.000s
sys 0m0.047s
12.4 网络相关调优
12.4.1 网卡绑定技术
功能 双线冗余
宽带增倍
1 ) 增加一张网卡 都为桥接模式
2 ) [root@xuegod2 network-scripts]# nmcli device
DEVICE TYPE STATE CONNECTION
ens33 ethernet 连接的 ens33
ens38 ethernet 连接的 ens38
virbr0 bridge 连接的 virbr0
lo loopback 未托管 --
virbr0-nic tun 未托管 --
3 ) [root@xuegod2 network-scripts]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 3e92dd32-e15b-47ed-8663-9dda562f0382 ethernet ens33
ens38 e49bdf6d-37c4-3a99-84aa-bf5c0b7f723c ethernet ens38
virbr0 88e2e037-8d2c-422a-95bd-ff05b79cb5f7 bridge virbr0
12.4.6 删除网卡连接信息
本次Network bonding 配置中,需要将ens33和ens38 绑定为bond0
4 ) 删除网卡信息
[root@xuegod2 network-scripts]# nmcli connection delete ens33
成功删除连接 'ens33'(3e92dd32-e15b-47ed-8663-9dda562f0382)。
[root@xuegod2 network-scripts]# nmcli connection delete ens38
成功删除连接 'ens38'(e49bdf6d-37c4-3a99-84aa-bf5c0b7f723c)。
[root@xuegod2 network-scripts]#
开始创建设备
5 ) [root@xuegod2 network-scripts]# nmcli connection add type bond ifname bondO con-name bondO miimon 100 mode active-backup primary ens33 ip4 192.168.24.62/24
连接“bondO”(d851a812-64cd-4253-91b1-30e161a69851) 已成功添加。
12.4.7 创建子接口
将网卡ens33 和ens38 创建为bondO 的子接口
添加网卡ens33 : 设备类型:bond-slave : 连接名称: bondO-p1 : master :bondO
[root@xuegod2 network-scripts]# nmcli connection add type bond-slave ifname ens33 con-name bondO-p1 master bondO
连接“bondO-p1”(f1885997-e76a-4f85-b774-6ef72738b1d6) 已成功添加。
[root@xuegod2 network-scripts]# nmcli connection add type bond-slave ifname ens38 con-name bondO-p2 master bondO
连接“bondO-p2”(0cffdda0-9f9b-4052-b810-46875ee3ee14) 已成功添加。
[root@xuegod2 network-scripts]# cat ifcfg-bondO-p1
TYPE=Ethernet
NAME=bondO-p1
UUID=f1885997-e76a-4f85-b774-6ef72738b1d6
DEVICE=ens33
ONBOOT=yes
MASTER=bondO
SLAVE=yes
12.4.8 激活bondO 子接口
查看当前已经激活的网络接口
激活成功
[root@xuegod2 network-scripts]# nmcli connection up bondO-p1
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/8)
[root@xuegod2 network-scripts]# nmcli connection up bondO-p2
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/8)
看到两个已经激活状态
2 ~]# nmcli connection up bondO 成功激活
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)
12.4.9 查看bondO 状态
[root@xuegod2 ~]# cd /proc/net/bonding/
[root@xuegod2 bonding]# ls
bondO
[root@xuegod2 bonding]#
[root@xuegod2 bonding]# cat bondO
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: ens33 (primary_reselect always)
Currently Active Slave: ens33
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:29:a3:05
Slave queue ID: 0
Slave Interface: ens38
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:29:a3:0f
Slave queue ID: 0
uegod2 bonding]# ping 192.168.24.62 测试一下
PING 192.168.24.62 (192.168.24.62) 56(84) bytes of data.
64 bytes from 192.168.24.62: icmp_seq=1 ttl=64 time=0.012 ms
64 bytes from 192.168.24.62: icmp_seq=2 ttl=64 time=0.022 ms
64 bytes from 192.168.24.62: icmp_seq=3 ttl=64 time=0.033 ms
64 bytes from 192.168.24.62: icmp_seq=4 ttl=64 time=0.019 ms
64 bytes from 192.168.24.62: icmp_seq=5 ttl=64 time=0.040 ms
把ens 33 挂掉
xuegod@xuegod2 ~]$ nmcli connection down bondO-p1
成功取消激活连接 'bondO-p1'(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/11)
照样能ping 通
xuegod@xuegod2 ~]$ nmcli connection up bondO-p1
开启以后它又回来了
[root@xuegod2 bonding]# cat bondO
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: ens33 (primary_reselect always)
Currently Active Slave: ens33
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens38
MII Status: up
在网卡中配置网关
vim ifcfg-bondO
GATEWAY=192.168.24.1
配置dns
vim /etc/resolv.conf
# Generated by NetworkManager
search cn
nameserver 114.114.114.114
重启网卡
12.5 网络内核相关参数调优
12。5.1 连接三次握手相关
Client Server
syn syn+ACK
ACK
~
解决方法
1 )[root@xuegod2 ~]# vim /etc/sysctl.conf
写入
net.ipv4.tcp_synack_retries = 0
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_max_syn_backlog = 20480
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
fs.file-max = 819200
net.core.somaxconn = 65535
net.core.rmem_max = 1024123000
net.core.wmem_max = 16777126
net.core.netdev_max_backlog = 165536
net.ipv4.ip_local_port_range = 10000 65535
[root@xuegod2 ~]# sysctl -p
[root@xuegod2 ~]# cat /proc/sys/net/ipv4/tcp_synack_retries
0 表示不要重发,默认为5 ,修改为0,表示不要重发,
net/ipv4/tcp_synack_retries =0
注意,以下参数面对外网时,不要打开。因为副作用很明显。
#当出现 半连接 队列溢出时向对方发送syncookies,调大 半连接 队列后没必要
net.ipv4.tcp_syncookies = 0
#TIME_WAIT状态的连接重用功能
net.ipv4.tcp_tw_reuse = 0
#时间戳选项,与前面net.ipv4.tcp_tw_reuse参数配合
net.ipv4.tcp_timestamps = 0
#TIME_WAIT状态的连接回收功能
net.ipv4.tcp_tw_recycle = 0