- 一、系统安装和分区经验
- 二、服务器网络配置
- 三、网络安全设置
- 1、Selinux配置
- iptables配置">2、iptables配置
- 四、系统登录安全与SSH配置
- 五、更新yum源已经软件版本
- 六、调整服务器时间NTP设置
- 七、系统资源调优
- 八、精简系统服务和开机进程
- 九、linux故障排查思路
- 十、Linux性能优化工具
- %user #用户空间的CPU使用
#%nice 改变过优先级的进程的CPU使用率
#%system 内核空间的CPU使用率
#%iowait CPU等待IO的百分比
#%steal 虚拟机的虚拟机CPU使用的CPU
#%idle 空闲的CPU - 2、内存性能评估
- 3、磁盘性能评估
- 4、网络性能评估
- 6、一般系统性能标准
一、系统安装和分区经验
1、磁盘RAID经验
系统盘:raid1
数据盘:raid5/raid1/raid10
2、Linux版本选择之我见
推荐版本:Centos5.8/6.5x86_64对应RHEL5.8/6.5
3、Linux分区经验
系统分区和数据分区分离原则
LVM是否需要
业务对数据读写有要求的化不建议使用
多分区原则(/、/boot、/var、/usr、 /data)
4、swap使用建议
大内存服务器是否还需要swap?
线上服务器swap设置建议
一定要设置,象征意义的设置4-8G
阿里云真的不需要swap吗?
尽量设置下
5、软件安装建议
精简安装策略:
1、仅安装需要的,按需安装、不用不装
2、开发包、基本网络包、基本应用包
二、服务器网络配置
centos6引入一个netmanage 会造成配置IP不生效的问题。可以关掉这个服务
1、服务器IP地址配置
/etc/sysconfig/network-scripts/ifcfg- eth0/1/2.
重启网卡命令:
service network restart或者/etc/init.d/network restart
2、网关/主机名配置
3、DNS配置
HOSTS文件配置
三、网络安全设置
1、Selinux配置
如何关闭selinux
cat /etc/selinux/config
SELINUX的状态:
enforcing开启状态
permissive提醒的状态
disabled关闭状态
命令行关闭:setenforce 0
2、iptables配置
/etc/sysconfig/iptables
推荐配置:
iptables -P INPUT ACCEPT # ssh链接的话把INPUT 链完全打开
iptables -F 清除所有规则来暂时停止防火墙 警告:这只适合在没有配置防火墙的环境中
通过iptables -L 看到如下信息
Chain INPUT (policy DROP 0 packets, 0 bytes) (注意 是DROP)
执行/sbin/iptables -F就肯定立马断开连接
当执行了
/sbin/iptables -P INPUT ACCEPT
再次通过iptables -L看信息的话就是
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
所以现在是可以安全使用
/sbin/iptables -F了
iptables -A INPUT -p tcp -m tcp —dport 80 -j ACCEPT
iptables -AINPUT -s 1.1.11 -p tcp-m tcp —dport22 -j ACCEPT
iptables -A INPUT -s 2.2.22 -p tcp-mtcp —dport22 -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT # 一般内网全开 外网有限制的开放
iptables -A INPUT-i lo -j ACCEPT
—web应用的安全防护措施
iptables -AINPUT -m state —state RELATED,ESTABLISHED - jACCEPT
iptables - A INPUT -p tcp -m tcp —tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE - DROP
iptables -A INPUT -p tcp -m tcp —tcp-flags FIN,SYN FIN,SYN - j DROP
iptables -AINPUT -p tcp -mtcp —tcp-flags SYN,RST SYN,RST-j DROP
iptables -A INPUT -p tcp -m tcp —tcp-flags FIN,RST FIN,RST-j DROP
iptables -AINPUT -ptcp -mtcp —tcp-flags FIN,ACK FIN -j DROP
iptables -A INPUT -p tcp -m tcp —tcp-flags PSH,ACK PSH - DROP
iptables -A INPUT -p tcp -m tcp —tcp-flags ACK,URGURG-jDROP
—
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
查看iptables命令
iptables -L -n
四、系统登录安全与SSH配置
1、授权用户登录与sudo设定
/etc/sudoers文件
常见配置:
iiveylinux ALL=(ALL)
NOPASSWD:ALL
2、ssh安全登录经验
备份:cp/etc/ssh/sshdconfig sshd config_bak(运维必备守则)
vi /etc/ssh/sshd_config
#SSH链接默认端[#不使用DNS反查,可提高ssh连接速度
UseDNS no
#关闭GSSAPI验证,可提高ssh连接速度
GSSAPIAuthentication no
#禁止root账号登陆
PermitRootLogin no
3、保持ssh连接配置
方法有以下两种
- 修改server端的etc/ssh/sshd_config (windows在 ~/.ssh/config)
ClientAliveInterval 60 #server每隔60秒发送一次请求给client,然后client响应,从而保持连接
ClientAliveCountMax 3 #server发出请求后,客户端没有响应得次数达到3,就自动断开连接
systemctl reload sshd
- 修改client端的etc/ssh/ssh_config (windows在 ~/.ssh/config)
ServerAliveInterval 60 #client每隔60秒发送一次请求给server,然后server响应,从而保持连接
ServerAliveCountMax 3 #client发出请求后,服务器端没有响应得次数达到3,就自动断开连接
五、更新yum源已经软件版本
1、常用yum源
epel源I: https://fedoraproject.org/wiki/EPEL
repoforge源: http://repoforge.org/use/
rpm-ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
2、升级系统内核以及更新软件清空yum缓存
yumclean all
生存缓存
yum makecache
开始更新系统以及内核
yum upgrade
必备软件
yum install ntpdate wget -y
六、调整服务器时间NTP设置
1、通过crontab设置时间同步
推荐时间服务器:ntp.sjtu.edu.cn
/usr/sbin/ntpdate ntp.sjtu.edu.cn>>/var/log/ntp.log 2>&1;/sbin/hwclock-w
2、架设ntp server
关注两个文件:
/etc/ntp/ntpserver.conf
/etc/ntp.conf
七、系统资源调优
1、关注ulimit命令
ulinit -a
ulimit -n(最大打开文件数)
常见案例日志:java.net.SocketException: Too many open files
相关配置文件:/etc/security/limits.conf
/etc/security/limits.d/90-nproc.conf(centos6.x版本)
soft nofile 65536
hard nofile 65536
ulimit -u(最大用户数)
* soft nproc 65536
root soft nproc unlimited
2、系统内核资源调优
ip_conntrack_max参数
常见案例日志:kernel:ipconntrack: table full, dropping packet
/proc/sys/net/ipv4/netfilter/ip conntrackmax 或者
/proc/sys/net/ipv4/ip_conntrack_max (centos5.x)
/proc/sys/net/netfilter/nf_conntrack max(centos6.x)
在/etc/sysctl.conf加入
net.ipv4.netfilter.ipconntrack max=655360 (centos5.x)
net.nfconntrack max = 100000 (centos6.x)
更新配置
sysctl -p
swappiness参数
表示使用swap的概率,此值越大,表示使用swap的概率越大。推荐配置如下:
查看目前配置:cat/proc/sys/vm/swappiness
添加如下内容到/etc/sysctl.conf
有redis 服务需要把这个参数设为0,一般10-30都可以,按需求
vm.swappiness=10
表示当内存使用率超过(100-vm.swappiness)%时,才开始使用swap。
我们线上web服务器配置参考(每天3亿的量)
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce-2
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recyde=1
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_max_syn_backlog=20000
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default=8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_mem=94500000 915000000 927000000
net.ipv4.tcp_max_orphans=3276800
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_tw_buckets=80000
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes =5
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_max_syn_backlog =20000
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default=8388608
net.core.rmem_default = 8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_syn_retries=2
3、文件系统优化
- ext2: linux下标准文件系统,无日志记录(inode)功能。
- ext3:在ext2基础,上增加了日志记录功能(inode),仅支持32000个子目录
- ex4 :ext3的后续版本,Linux2.6.28内核开始支持。无限子目录支持,快速fsck文件修复。
- xfs:高性能文件系统,linux3.10内核开始默认支持。
建议:读操作频繁,同时小文件众多的应用:首选ext4文件系统,接下来依次是xfs、ext3
写操作频繁的应用,首选是xfs,接下来依次是ext4和ext3
对性能要求不高、数据安全要求不高的业务,ext3是比较好的选择。
八、精简系统服务和开机进程
1、线上服务器建议开启的服务
八、精简系统服务和开机进程1、线上服务器建议开启的服务
I
crond, network, syslog, sshd, iptables. udev-post, sysstat
快捷开启方法:
先关闭所有
for serv in ‘chkconfig —listlgrep 3:on|awk “{print $1}”;do chkconfig —level 3 $ serv
off;done
然后开启需要的服务:for serv in ]crond network syslog sshd iptables udev-post sysstat;do chkconfig
—level 3 $serv on;done
2、可删除的系统用户组
删除不必要的用户userdel adm
userdel lp
userdel sync
userdel shutdown
userdel halt
userdel news
userdel uucp
userdel video
userdel games
userdel gopher
userdel ftp
#删除不必要的群组groupdel adm
groupdel lp
groupdel news
groupdel uucp
groupdel games
groupdel dip
九、linux故障排查思路
1、重视报错提示信息
每个错误的出现都是给出错误提示信息,一般情况下这个提示基本定位了问题的所在,因此一定要重视这个报错信息,如果对这些错误信息视而不见,问题永远得不到解决.
2、永远不要忘记日志文件
日志是排查问题的第一思路,一定要学会查看日志的习惯。
系统日志:dmesg(内存信息)、/var/log/messages、 /var/log/secure(ssh登陆日志)
应用日志:
Apache : $APACHE_BASE/logs/error_log $APACHE_BASE/logs/access_log
Nginx : $NGINX_BASE/ logs/error_log $NGINX_BASE/logs/access_log
Tomcat : $TOMCAT BASE/logs/catalina.out
3、分析、定位问题、解决问题
综合分析过程,要以日志为导向,配合应用环境,根据报错信息,排除故障。
4、网络故障排除思路
(1)网络硬件传输问题
(2)检查网卡是否能正常工作,可以从网卡是否正常加载、网卡IP设置是否正确
(3)检查DNS是否设定正确
(4)服务是否正常打开
(5)访问权限是否打开(iptables/selinux)
(6)局域网主机之间联机是否正常
二、影响Linux性能的各种因素1系统硬件资源
多核CPU单个核心的性能是单个单核个物理 CPU性能的30%左右
(1)CPU
如何判断多核CPU与超线程
消耗CPU的业务:动态web服务、mail服务
(2)内存
物理内存与swap的取舍
选择64位Linux操作系统
消耗内存的业务:内存数据库(redis/hbase/mongodb)
(3)磁盘I/O
RAID技术(RAIDO/1/5/01/10)
SSD磁盘
消耗磁盘的业务:数据库服务器
(4)网络带宽
网卡/交换机的选择
操作系统双网卡绑定
2、操作系统相关资源(1)系统安装优化
磁盘分区、RAID设置、swap设置
(2)内核参数优化
ulimit-n(最大打开文件数)
ulimit -u(最大用户数)
(3)文件系统优化
ext2: linux下标准文件系统,无日志记录(inode)功能。
ext3:在ext2基础,上增加了日志记录功能(inode),仅支持32000个子目录
ex4 :ext3的后续版本,Linux2.6.28内核开始支持。无限子目录支持,快速fsck。
xfs:高性能文件系统,linux3.10内核开始默认支持。
消耗带宽的业务:hadoop平台、视频业务平台
5、程序问题此类问题
需要开发人员查看代码介入处理。但作为运维人员需要给出程序问题的有力证据。
十、Linux性能优化工具
1、cpu性能评估工具
vmstat
利用vmstat命令可以对操作系统的内存信息、进程状态CPU活动等进行监视。
常用方式:vmstat 3 5
表示每3秒更新一次输出信息,统计5次后停止输出。
procs — ————-memory————— —-swap— ——-io—— -system— ———cpu——-
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 257844 83352 1195656 0 0 1 35 8 5 1 1 98 0 0
0 0 0 257816 83352 1195672 0 0 0 65 201 462 1 1 98 0 0
0 0 0 257008 83352 1195672 0 0 0 20 220 463 1 1 99 0 0
0 0 0 260884 83352 1195676 0 0 0 31 187 412 0 1 98 0 0
0 0 0 260884 83352 1195676 0 0 0 11 197 411 0 1 99 0 0
r 正在处理的进程数,如果大于cpu核心数说明cpu任务比较重
b 正在等待资源的进程数 不能经常大于CPU总核数
si 临时数据放入交换分区的数量
so 内存交换区放入物理内存的数量
bi 快设备读取数据的大小 单位KB
bo 写入到快设备的数量大小
in 某一个事件间隔内检测到的每秒设备的中断数
cs 某一个事件间隔内每秒上下文切换数
us 用户进程消耗cpu百分比
sy 系统进程(内核)消耗cpu百分比 # us+sy 长期大于80%说明cpu资源不是很足
id 空闲状态占比
wa I/O等待占比 # 超过20% 检查磁盘I/O是否存在问题 超过50%大概率存在问题
st
iostat(需要安装sysstat工具包)
iostat是1/0 statistics(输入/输出统计)的缩写,主要的功能是对系统的磁盘I/O操
作进行监视
常用方式:iostat -c 3 5
其中,-c表示显示CPU的使用情况,-d: 显示磁盘的使用情况(默认)。
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtnvda
4.61 0.84 34.93 3243099 135130745
scd0 0.00 0.00 0.00 6688 0
loop0 0.00 0.00 0.00 2102 0
-c
avg-cpu: %user %nice %system %iowait %steal %idle
0.82 0.02 0.83 0.16 0.00 98.18
avg-cpu: %user %nice %system %iowait %steal %idle
0.67 0.00 0.33 0.00 0.00 99.00
%user #用户空间的CPU使用
#%nice 改变过优先级的进程的CPU使用率
#%system 内核空间的CPU使用率
#%iowait CPU等待IO的百分比
#%steal 虚拟机的虚拟机CPU使用的CPU
#%idle 空闲的CPU
uptime
uptime是监控系统性能最常用的一个命令,主要用来统计系统当前的运行状况,输出的信 息依次为系统现在的时间、系统从上次开机到现在运行了多长时间、系统目前有多少登陆用户、系统在一分钟内、五分钟内、十五分钟内的平均负载。
[root@VM-0-5-centos ~]# uptime
当前时间 启动 了 44天.. 当前登陆用户1 1/5/15/分钟之内整体的负载状态
18:35:28 up 44 days, 18:49, 1 user, load average: 0.00, 0.01, 0.00
top
2、内存性能评估
free
free命令是监控linux内存使用状况最常用的指令
常见用法:free-m Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。
Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。
Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。
Buffer:一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。
sar(sysstat工具包)/pidstat
此两个命令主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存设备。
三个公用参数: -u(获取CPU状态) -r(获取内存状态) -d(获取磁盘)
sar
sar -u 3 获取所有进程3秒内的cpu状态
pidstat -r -p 1 3 每3秒获取PID为1的进程在3秒内的状态
pidstat
统计某一个进程
pidstat -r -p 1 3
3、磁盘性能评估
iostat -d 2 3
pidstat -d -p 2 3
sar -d 2 3
4、网络性能评估
ping
netstat
netstat -i(查看路由情况)
netstat -r(查看网络接口状态)
mtr/traceroute命令
跟踪网络路由状态,推荐使用mtr,动态跟踪网络路由,用于排除网络问题非常方便。
一般在windows 来判断网络连通性用ping 和tracert,ping的话可以来判断丢包率,tracert可以用来跟踪路由,在Linux中有一个更好的网络连通性判断工具,它可以结合ping nslookup tracert 来判断网络的相关特性,这个命令就是mtr
[root@10.10.90.97 ~]#mtr -h
usage: mtr [-hvrctglspni46] [--help] [--version] [--report]
[--report-cycles=COUNT] [--curses] [--gtk][--raw] [--split]
[--no-dns] [--address interface][--psize=bytes/-s bytes]
[--interval=SECONDS] HOSTNAME [PACKETSIZE]
mtr -h提供帮助命令
mtr -v显示mtr的版本信息
mtr -r已报告模式显示
mtr -s用来指定ping数据包的大小
mtr -nno-dns不对IP地址做域名解析
mtr -a来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
mtr -i使用这个参数来设置ICMP返回之间的要求默认是1秒
mtr -4IPv4
mtr -6IPv6
[root@10.10.90.97 ~]# mtr -r -c 15 202.108.33.94 # -c:--report-cycles COUNT 默认10
FOCUS9097 Snt: 15 Loss% Last Avg Best Wrst StDev
220.181.61.252 0.0% 1.9 3.4 1.8 12.9 3.1
220.181.17.217 0.0% 0.5 0.5 0.4 0.8 0.1
220.181.16.17 0.0% 0.5 0.6 0.5 2.3 0.5
202.97.53.14 0.0% 0.7 0.7 0.7 0.7 0.0
219.158.35.1 0.0% 0.9 0.8 0.8 0.9 0.0
219.158.5.81 0.0% 1.3 2.8 1.2 22.8 5.5
123.126.0.138 0.0% 1.1 1.1 1.1 1.2 0.0
61.148.153.126 0.0% 13.8 7.4 1.6 60.4 15.5
61.148.143.22 0.0% 1.7 1.6 1.5 1.8 0.1
210.74.178.198 0.0% 1.6 1.6 1.4 1.7 0.1
202.108.33.94 0.0% 1.5 1.5 1.4 1.7 0.1
第一列 显示的是IP地址和本机域名,这点和tracert很像
snt 设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定。
Loss% 是显示的每个对应IP的丢包率
Last 显示的最近一次的返回时延
Avg 是平均值 这个应该是发送ping包的平均时延
Best 是最好或者说时延最短的
Wrst 是最差或者说时延最常的
StDev 是标准偏差接下来接着说相关参数:
6、一般系统性能标准
性能因素 | 好 | 坏 | 糟糕 |
---|---|---|---|
CPU | user% + sys%< 70% | user% + sys%=85% | user%+sys% >=90% |
内存 | Swap In (si) =0 Swap Out (so)=0 |
Per CPU with 10 page/s | More Swap In & Swap Out |
磁盘 | iowait % < 20% | iowait %=35% | iowait % >=50% |
%user:表示CPU处在用户模式下的时间百分比。
%sys:表示CPU处在系统模式下的时间百分比。
%iowait:表示CPU等待输,入输出完成时间的百分比。
swapin:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM。