centos7内核升级
下载内核源
1
|
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
|
装最新版本内核
1
|
yum --enablerepo=elrepo-kernel install -y kernel-lt
|
查看
1
|
cat /boot/grub2/grub.cfg |grep menuentry
|
设置开机从新内核启动
1
|
grub2-set-default "CentOS Linux (4.4.221-1.el7.elrepo.x86_64) 7 (Core)"
|
关闭防火墙
1
2
|
systemctl stop firewalld
systemctl disable firewalld
|
安装常用工具
1
2
3
4
5
6
|
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim git net-tools dos2unix lsof tcpdump lrzsz telnet bash-completion.noarch conntrack-tools
linux 补全
yum install libvirt-bash-completion bash-completion gedit-plugin-bracketcompletion gedit-plugin-wordcompletion libguestfs-bash-completion -y
|
setenforce
1
2
|
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
|
更新histroy和shell保持时间
1
2
3
4
5
|
vim /etc/profile
export HISTSIZE=100
export TMOUT=300
|
关掉swap分区
1
2
3
4
5
|
swapoff -a
# 如果想永久关掉swap分区,打开如下文件注释掉swap哪一行即可.
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
echo "vm.swappiness = 0">> /etc/sysctl.conf
sysctl -p
|
邮件服务关闭
1
2
|
systemctl stop postfix.service
systemctl disable postfix.service
|
日志优化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
mkdir /var/log/journal
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf << EOF
[journal]
# 持久化保存到磁盘
Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
SystemMaxUse=10G
# 但日志文件最大 200M
SystemMaxFileSize=200M
# 日志保持时间2周
MaxRetentionSec=2week
# 不将日志转发到syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald
|
加载ipvs
1
2
3
4
5
6
7
8
9
10
|
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
|
文件优化
echo ‘* - nofile 65535 ’ »/etc/security/limits.conf
echo ‘vm.max_map_count=262144 ’ »/etc/security/limits.conf
sysctl vm.overcommit_memory=1
tail -1 /etc/security/limits.conf
sysctl -p
内核优化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_orphans = 16384
net.ipv4.tcp_mem = 94500000 915000000 927000000
EOF
sysctl -p
|
??? note “详细”
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
sshd 服务优化
1
2
3
4
5
6
7
|
vim /etc/ssh/sshd_config
GSSAPIAuthentication 赋值为no
UseDNS,赋值为 no(该项默认不启用的,要把前面的#删除掉)
重启systemctl restart sshd
|
二、系统相关命令
1.CPU 核数 和 型号 和 主频
1
|
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
|
2.测试磁盘 IO 性能
1).hdparm 命令
hdparm 命令提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数,注意该命令只能测试磁盘的读取速率。
1
2
3
4
5
|
[root@server-68.2.stage.polex.io var ]$ hdparm -Tt /dev/polex_pv/varvol
/dev/polex_pv/varvol:
Timing cached reads: MB in 2.00 seconds = 7803.05 MB/sec
Timing buffered disk reads: MB in 3.01 seconds = 374.90 MB/sec
|
2).dd 命令
Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
我们可以利用 dd 命令的复制功能,测试某个磁盘的 IO 性能,须要注意的是 dd 命令只能大致测出磁盘的 IO 性能,不是非常准确。
1
2
3
4
5
6
7
8
|
[root@server-68.2.stage.polex.io var ]$ time dd if=/dev/zero of=test.file bs=1G count= oflag=direct
+ records in
+ records out
bytes (2.1 GB) copied, 13.5487 s, MB/s
real 0m13.556s
user 0m0.000s
sys 0m0.888s
|
??? note “参数说明”
可以看到,该分区磁盘写入速率为 159M/s,其中:
/dev/zero 伪设备,会产生空字符流,对它不会产生 IO 。
if 参数用来指定 dd 命令读取的文件。
of 参数用来指定 dd 命令写入的文件。
bs 参数代表每次写入的块的大小。
count 参数用来指定写入的块的个数。
offlag=direc 参数测试 IO 时必须指定,代表直接写如磁盘,不使用 cache 。
3).FIO测试磁盘IO性能
fio 命令是专门测试 iops 的命令,比 dd 命令准确,fio 命令的参数很多,这里举几个例子供大家参考:
1
2
3
4
5
6
7
8
9
10
|
# 随机读:
fio -filename=/dev/sda1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file
# 顺序读:
fio -filename=/dev/sda1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file
# 随机写:
fio -filename=/dev/sda1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file
# 顺序读:
fio -filename=/dev/sda1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file
# 混合随机读写:
fio -filename=/dev/sda1 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=30 -ioengine=psync -bs=4k -size=60G -numjobs=64 -runtime=10 -group_reporting -name=file -ioscheduler=noop
|
文中bw=1532.2KB/s, iops=383即是测试出的iops
??? note “参数说明”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
filename=/dev/sda1:测试文件名称,通常选择需要测试的盘的data目录
direct=1:测试过程绕过机器自带的buffer。使测试结果更真实
rw=randwrite:测试随机写的I/O
rw=randrw:测试随机写和读的I/O
rw=randread:测试随机读的I/O
bs=4k:单次io的块文件大小为4k
bsrange=512-2048:同上,提定数据块的大小范围
size=60g:本次的测试文件大小为60g,以每次4k的io进行测试
numjobs=64:本次的测试线程为64
runtime=10:测试时间为10秒,如果不写则一直将5g文件分4k每次写完为止
ioengine=psync:io引擎使用pync方式
rwmixwrite=30:在混合读写的模式下,写占30%
group_reporting:关于显示结果的,汇总每个进程的信息。
此外
lockmem=1g:只使用1g内存进行测试
zero_buffers:用0初始化系统buffer
nrfiles=8:每个进程生成文件的数量。
|
4).iostat 命令
先用iostat查看磁盘io 是否读写负载很高
如果%util接近100%,表明I/O请求太多,I/O系统已经满负荷,磁盘可能存在瓶颈,一般%util大于70%,I/O压力就比较大,读取速度有较多的wait,然后再看其他的参数
1
2
3
|
yum install sysstat
iostat -x 1 10
|
??? note “解释”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
rrqm/s:每秒进行merge的读操作数目。即delta(rmerge)/s
wrqm/s:每秒进行merge的写操作数目。即delta(wmerge)/s
r/s:每秒完成的读I/O设备次数。即delta(rio)/s
w/s:每秒完成的写I/0设备次数。即delta(wio)/s
rsec/s:每秒读扇区数。即delta(rsect)/s
wsec/s:每秒写扇区数。即delta(wsect)/s
rKB/s:每秒读K字节数。是rsec/s的一半,因为每扇区大小为512字节
wKB/s:每秒写K字节数。是wsec/s的一半
avgrq-sz:平均每次设备I/O操作的数据大小(扇区)。即delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均I/O队列长度。即delta(aveq)/s/1000(因为aveq的单位为毫秒)
await:平均每次设备I/O操作的等待时间(毫秒)。即delta(ruse+wuse)/delta(rio+wio)
svctm:平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio)
%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的
|
5).iotop 命令
找出使用io高的进程的工具 直接执行 iotop 命令
3.sar 命令
sar -u 1 1 表示查看CPU利用率 每隔1秒写入1次
sar 命令是分析系统瓶颈的神器,可以用来查看 CPU 、内存、磁盘、网络等性能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@server-68.2.stage.polex.io var ]$ sar -d -p
Linux 3.10.-693.5..el7.x86_64 (server-) // _x86_64_ ( CPU)
:: PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
:: PM sda 1.00 0.00 3.00 3.00 0.01 9.00 9.00 0.90
:: PM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
:: PM polex_pv-rootvol 1.00 0.00 3.00 3.00 0.01 9.00 9.00 0.90
:: PM polex_pv-varvol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
:: PM polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
:: PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
:: PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
:: PM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
:: PM polex_pv-rootvol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
:: PM polex_pv-varvol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
:: PM polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sda 0.50 0.00 1.50 3.00 0.00 9.00 9.00 0.45
Average: sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: polex_pv-rootvol 0.50 0.00 1.50 3.00 0.00 9.00 9.00 0.45
Average: polex_pv-varvol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: polex_pv-homevol 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
其中, “-d”参数代表查看磁盘性能,“-p”参数代表将 dev 设备按照 sda,sdb……名称显示,“1”代表每隔1s采取一次数值,“2”代表总共采取2次数值。
??? note “参数说明”
await:平均每次设备 I/O 操作的等待时间(以毫秒为单位)。
svctm:平均每次设备 I/O 操作的服务时间(以毫秒为单位)。
%util:一秒中有百分之几的时间用于 I/O 操作。
对于磁盘 IO 性能,一般有如下评判标准:
正常情况下 svctm 应该是小于 await 值的,而 svctm 的大小和磁盘性能有关,CPU 、内存的负荷也会对 svctm 值造成影响,过多的请求也会间接的导致 svctm 值的增加。
await 值的大小一般取决与 svctm 的值和 I/O 队列长度以 及I/O 请求模式,如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
%util 项的值也是衡量磁盘 I/O 的一个重要指标,如果 %util 接近 100% ,表示磁盘产生的 I/O 请求太多,I/O 系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。
4.vmstat 命令
1
2
3
|
[root@server-68.2.stage.polex.io var ]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
|
输出结果中,bi bo 可以表示磁盘当前性能:
bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是 1024 byte 。
bo 块设备每秒发送的块数量,例如我们读取文件,bo 就要大于0。bi 和 bo 一般都要接近 0,不然就是 IO 过于频繁,需要调整。
5.uptime命令
1
2
3
4
5
6
|
uptime
输出的信息依次为:系统现在的时间、系统从上次开机到现在运行了多长时间、有多少用户登陆、系统在1分钟内,
5分钟内,15分钟内的平均负载。
load average的三个值如果长期大于系统中CPU个数,说明CPU负载很高,可能会影响系统性能。
|
6.TCP/IP 相关
1).netstat命令
1
|
netstat -an |grep tcp 查看当前所有的TCP连接相关信息
|
2).Socket Statistics命令
之前采用netstat命令会发现在服务器繁忙的时候效果不理想,有时会占用高达90%以上的CPU。
而Socket Statistics(ss)命令底层使用TCP协议栈中用于分析统计的tcp_diag模块,所以速度更快、更高效。
ss -t 显示系统目前所有TCP连接的连接情况
??? note “介绍”
-t 只显示TCP连接信息
-a 显示所有连接信息
-u 只显示UDP连接信息
几乎所有的Linux系统都会默认包含netstat命令,但并非都会包含ss命令(Centos默认包含)。
ss命令包含iproute工具集中,这是一套可以支持IPv4/IPv6网络的用于管理TCP/UDP/IP网络的工具集。
如果找不到ss命令,可以如下安装此工具集: yum install iproute iproute-doc
7.磁盘I/O、吞吐量和存储IOPS
磁盘I/O、吞吐量和IOPS性能指标
云服务器磁盘存储性能指标包括磁盘I/O、IOPS和吞吐量,服务器百科来详细说下磁盘I/O、存储IOPS、和吞吐量意义详解,及磁盘IO、IOPS和吞吐量之间的关系:
- 存储IOPS:磁盘IOPS是指一秒内磁盘进行多少次I/O读写;
- 磁盘I/O:I/O,即input/output,磁盘的输入输出,输入指的是对磁盘写入数据,输出指的是从磁盘读出数据,磁盘I/O可以理解为读写。应用发起的一次或多次数据请求,I/O请求的数据量又称I/O大小,单位为KiB,例如4KiB、256KiB、1024KiB等;
- 磁盘吞吐量:每秒磁盘I/O的流量,即磁盘写入加上读出的数据的大小。
存储IOPS、磁盘I/O和吞吐量关系公式
存储IOPS、磁盘I/O和吞吐量之间的关系公式为:吞吐量 = IOPS * I/O大小
也就是说,磁盘I/O越大,IOPS越高,那么磁盘那么每秒I/O的吞吐量就越高,根据公式服务器百科网认为IOPS和吞吐量的数值越高越好,实际上磁盘IOPS和吞吐量两个参数是有最大值的。
关于云服务器磁盘存储I/O性能详细说明可以参考阿里云ecs6.com关于云服务器存储I/O性能的说明。
常见的linux监控命令
free
df
top / htop
uptime
iftop
iostat
iotop
vmstat
netstat
nethogs 每个进程用了多少流量