1.TCP三次握手和四次挥手
2.优化文件打开数
为了防止失控的进程破坏系统的性能,Linux会跟踪进程使用的大部分资源,并允许用户和系统管理员对进程的资源限制,例如控制某个进程打开的系统文件数、对某个用户打开系统进程数进行限制,包括软显示和硬限制
软限制
soft limit 内核实际执行的限制,任何进程都可以讲软限制设置为任意小于或等于对进程的硬限制的值、最大线程数(noproc)和文件数(nofile)
硬限制
可以在任何时候任何进程中设置,但应限制只能由超级用户修改
默认Linux对每个用户打开文件最大数为1024,对于高并发网站是远远不够的
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 66535
* soft noproc 65535
* hard noproc 65535
如果需要对Linux整个系统设置文件最大数限制,需要修改
[root@nginx ~]# cat /proc/sys/fs/file-max
6815744
3.内核参数的优化
Linux /proc/sys 目录下存放着对数内核的参数
/etc/sysctl.conf 修改内核参数永久生效
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies =1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 87380 4194304
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 65500
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 945000000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65535
Linux内核日志一般保存在messages日志中 /var/log/messages
4.影响服务器性能因素
cpu user%+sys% < 70%
内存 Swap In(si) = 0 Swap Out(so) = 0
磁盘 iowait% < 20%
常用的分析命令为:
vmstat sar iostat netstat free ps top iftop等
vmstat sar iostat CPU
free vmstat 内存
iostat 磁盘
netstat iftop 网络宽带
整体性能评估
uptime
[root@nginx ~]# uptime
23:36:00 up 3:18, 2 users, load average: 0.00, 0.01, 0.05
load average 三个值 分别表示 最近1、5、15分钟系统的负载
三个值一般不能超过系统逻辑CPU核数的2倍
CPU性能评估
vmstat
[root@nginx ~]# vmstat 2 10
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 3594200 2076 148892 0 0 5 1 31 28 0 0 100 0 0
0 0 0 3594184 2076 148892 0 0 0 0 57 44 0 0 100 0 0
0 0 0 3594184 2076 148892 0 0 0 0 48 42 0 0 100 0 0
0 0 0 3594184 2076 148892 0 0 0 0 43 35 0 0 100 0 0
0 0 0 3594184 2076 148892 0 0 0 0 48 39 0 0 100 0 0
0 0 0 3594184 2076 148892 0 0 0 0 42 35 0 0 100 0 0
0 0 0 3594184 2076 148892 0 0 0 0 55 43 0 0 100 0 0
0 0 0 3594184 2076 148892 0 0 0 0 53 42 0 0 100 0 0
0 0 0 3594184 2076 148892 0 0 0 0 55 46 0 0 100 0 0
0 0 0 3594184 2076 148892 0 0 0 0 44 36 0 0 100 0 0
r :该列表示运行和等待CPU时间片的进程数,如果该值长时间大于系统CPU的个数,说明CPU不足,需要增加CPU
b: 表示等待资源的进程数,比如正在等待I/O或者内存交换等
us: 用户进程消耗的CPU时间百分比,如果长期大于50%,就需要考虑优化程序或算法
sy:内核进程消耗的CPU时间百分比,
us+sys: 参考值为80% ,大于80%说明存在CPU资源不足
sar
功能强大,但消耗资源,不过不影响评估
yum -y install sysstat
[root@nginx ~]# sar -u 2 10
Linux 3.10.0-693.el7.x86_64 (nginx.example.com) 11/12/2019 _x86_64_ (2 CPU)
11:54:53 PM CPU %user %nice %system %iowait %steal %idle
11:54:55 PM all 0.00 0.00 0.00 0.00 0.00 100.00
11:54:57 PM all 0.00 0.00 0.00 0.00 0.00 100.00
11:54:59 PM all 0.00 0.00 0.00 0.00 0.00 100.00
11:55:01 PM all 0.00 0.00 0.25 0.00 0.00 99.75
11:55:03 PM all 0.00 0.00 0.25 0.00 0.00 99.75
11:55:05 PM all 0.00 0.00 0.00 0.00 0.00 100.00
11:55:07 PM all 0.00 0.00 0.00 0.00 0.00 100.00
11:55:09 PM all 0.00 0.00 0.25 0.00 0.00 99.75
11:55:11 PM all 0.00 0.00 0.00 0.00 0.00 100.00
11:55:13 PM all 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.00 0.00 0.08 0.00 0.00 99.92
%user
%nice
%system
%iowait
%steal
%idle
内存性能评估
free
[root@nginx ~]# free -m
total used free shared buff/cache available
Mem: 3774 118 3350 8 305 3406
Swap: 5721 0 5721
应用程序可用内存/系统物理内存>70%,表示内存充足
应用程序可用内存/系统物理内存<20%,表示内存资源紧缺 需要增加内存
20%<应用程序可用内存/系统物理内存 <70% 基本够用,不影响系统性能
磁盘性能评估
iostat
[root@nginx ~]# iostat -d 1 10
Linux 3.10.0-693.el7.x86_64 (nginx.example.com) 11/12/2019 _x86_64_ (2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.08 0.00 1028 0
sda 0.51 13.87 9.70 178010 124535
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.00 0.00 0 0
kB_read/s 每秒读取的数据块数
kB_wrtn/s 每秒写入的数据块数
kB_read 读取的所有数据块数
kB_wrtn 写入的所有数据块数
sar
[root@nginx ~]# sar -d 1 10
Linux 3.10.0-693.el7.x86_64 (nginx.example.com) 11/12/2019 _x86_64_ (2 CPU)
11:56:40 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:56:41 PM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:56:41 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:56:41 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:56:42 PM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:56:42 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:56:42 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:56:43 PM dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
await 平均每次IO操作的等待时间 单位ms
svctm 平均每次IO操作的服务时间 ms
%util 表示1S中有百分之几的时间用于IO操作
评估标准svctm 应该小于await
svctm 的大小和磁盘性能有关 CPU,内存负荷也会对 该值有影响
过多的请求也会导致svctm 值的增加
如何svctm 和await的值接近,表示几乎没有IO等待,性能很好
如何大于svctm 表示IO队列等待很长
%util 如何接近100% 表示磁盘I/O请求过多,磁盘存在瓶颈