课时1:系统安装和分区经验与网络配置

一、系统安装和分区经验

1、磁盘RAID经验

系统盘:raid1
数据盘:raid5/raid1/raid10

2、Linux版本选择之我见

推荐版本:Centos5.8/6.5 x86_64

3、Linux分区经验

系统分区和数据分区分离原则
LVM是否需要(逻辑卷管理)
多分区原则(/、 /boot、 /var、 /usr、 /data)

4、swap使用建议

大内存服务器是否还需要swap?
线上服务器swap设置建议
阿里云真的不需要swap吗?
一定要设置。内存的40%

5、软件安装建议

精简安装策略:
1、仅安装需要的,按需安装、不用不装
2、开发包、基本网络包、基本应用包
image.png
Centos7.x下的设置:
image.png

二、服务器网络配置

1、服务器IP地址配置

/etc/sysconfig/network-script/ifcfg-etho/1/2….
重启网卡命令:
service network restart 或者 /etc/init.d/network restart

2、网关/主机名配置

/etc/sysconfig/network

3、DNS配置

/etc/resolv.conf

4、HOSTS文件配置

/etc/hosts

课时2:线上服务器网络安全配置与系统登录安全配置

三、网络安全配置

1、Selinux配置(如何关闭selinux)

cat /etc/selinux/config
SELINUX的状态:
enforcing 开启状态
permissive 提醒的状态
disabled 关闭状态
命令行关闭:setenforce 0

2、iptables配置

/etc/sysconfig/iptables
推荐配置:
iptables -P INPUT ACCEPT
iptables -F

iptables -A INPUT -p tcp -m tcp —dport 80 -j ACCEPT

iptables -A INPUT -s 1.1.1.1 -p tcp -m tcp —dport 22 -j ACCEPT

iptables -A INPUT -s 2.2.2.2 -p tcp -m tcp —dport 22 -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -m state —state RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp -m tcp —tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP

iptables -A INPUT -p tcp -m tcp —tcp-flags FIN,SYN FIN,SYN -j DROP

iptables -A INPUT -p tcp -m tcp —tcp-flags SYN,RST SYN,RST -j DROP

iptables -A INPUT -p tcp -m tcp —tcp-flags FIN,RST FIN,RST -j DROP

iptables -A INPUT -p tcp -m tcp —tcp-flags FIN,ACK FIN -j DROP

iptables -A INPUT -p tcp -m tcp —tcp-flags PSH,ACK PSH -j DROP

iptables -A INPUT -p tcp -m tcp —tcp-flags ACK,URG URG -j DROP

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

查看iptables策略:
iptables -L -n

四、系统登录安全与SSH

1、授权用户登录与sudo设定

/etc/sudoers文件
=
常见配置:
chaitc ALL=(ALL) NOPASSWD:ALL

2、ssh安全登录经验

备份:cp /etc/ssh/sshd_config sshd_config_bak (运维必备守则)
vi /etc/ssh/sshd_config
#SSH 链接默认端口
# 不使用DNS反查,可提高ssh连接速度
UseDNS no
# 关闭GSSAPI验证,可提高ssh连接速度
GSSAPIAuthentication no
# 禁止root账号登录
PermitRootLogin no

课时3:通过yum更新软件包以及常见yum源推荐

五、更新yum源以及软件版本

1、常用的几个yum源

epel 源: 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 缓存
yum clean 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

课时4:系统资源调优与内核参数配置

七、系统资源调优

1、关注ulimit命令

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、系统内核参数调优

常见案例日志:kernel:ip_conntrack:table full,dropping packet
ip_conntrack_max 参数
/proc/sys/net/ipv4/netfilter/ip_conntrack_max 或者
/proc/sys/net/ipv4/ip_conntrack_max (centos5.x)
/proc/sys/net/netfilter/nf_conntrack_max(centos6.x)

/etc/sysctl.conf 加入
net.ipv4.netfilter.ip_conntrack_max = 655360(centos5.x)
net.nf_conntrack_max = 100000(centos6.x)
swappiness参数
表示使用swap的概率,此值越大,表示使用swap的概率越大,推荐配置如下:
查看目前配置: cat /proc/sys/vm/swappiness
添加如下内容到/etc/sysctl.conf
vm.swappiness=10
表示当内存使用率超过( 100-10) 90%时,才开始使用 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_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

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 = 1

net.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

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_max_orphans = 3276800

net.ipv4.ip_local_port_range = 1024 65535

net.ipv4.tcp_max_tw_buckets = 500000

net.ipv4.tcp_keepalive_time = 60

net.ipv4.tcp_keepalive_intvl = 15

net.ipv4.tcp_keepalive_probes = 5

net.nf_conntrack_max = 2097152

课时5:精简系统服务和开机进程

八、精简系统服务和开机进程

1、线上服务器建议开启的服务

crond, network, syslog, sshd、 iptables、 udev-post、 sysstat
快捷开启方法:
先关闭所有

  1. for serv in chkconfig --list | grep 3:on | awk '{print $1}'; do chkconfig --level 3 $serv off;done<br />然后开启需要的服务:<br />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

课时6:Linux故障排除思路以及影响Linux性能的各种因素

课程安排

  • 系统故障排除思路
  • 重规报错信息
  • 永远不要忘记日志文件
  • 分析、定位、解决问题
  • 影响 Linux 性能的各种因素
  • 服务器硬件因素
  • 操作系统相关因素
  • 程序因素
  • Linux 性能优化工具
  • cpu 性能优化工具vmstat、 iostat、 sar
  • 内存性能检测工具: free、 top、 sar、 pidstat
  • 磁盘性能评估工具: iostat、 sar
  • 网络性能分析工具: ping、 mtr、 netstat
  • 系统性能分析标准
  • 几个故障处理案例和性能优化案例
  • su 命令切换用户导致的问题
  • 磁盘突然变成只读怎么处理
  • 基于动、静态网站的优化案例

    一、Linux故障排除思路

    1、重视报错提示信息

    每个错误的出现,都是给出错误提示信息,一般情况下这个提示基本定位了问题的所在,因此一定要重视这个报错信息,如果对这些错误信息视而不见,文件永远得不到解决。

    2、永远不要忘记日志文件

    日志是排查问题的第一思路,一定要学会查看日志的习惯。
    系统日志:dmesg、/var/log/messages、/var/log/secure
    应用日志:
    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、系统硬件资源

(1)CPU
如何判断多核CPU与超线程
(2)内存
物理内存与swap的取舍
选择64位Linux操作系统
消耗内存的业务:内存数据库(redis/hbase/mongodb)
(3)磁盘IO
RAID技术(RAID0/1/5/01/10)
SSD磁盘
消耗磁盘的业务:数据库服务器
(4)网络带宽
网卡/交换机的选择
操作系统双网卡绑定
消耗带宽的业务:hadoop平台、视频业务平台

2、操作系统相关资源

(1)系统安装优化
磁盘分区、RAID设置、swap设置
(2)内核参数优化
ulimit -n(最大打开文件数)
ulimit -u(最大用户数)
(3)文件系统优化
ext2:Linux下标准文件系统,五日志记录(inode)功能
ext3:在ext2基础上增加了日志记录功能(inode),仅支持32000个子目录
ext4:ext3的后续版本,Linux2.6.28内核开始支持,无线子目录支持,快速fsck.
xfs:高性能文件系统,Linux3.10内核开始默认支持。
建议:
读操作频繁,同时小文件众多的应用:首选ext4文件系统,接下来是xfs、ext3
写操作频繁的应用,首选是xfs,接下来依次是ext4和ext3
对性能要求不高、数据安全要求不高的业务,ext3是比较好的选择。

课时8:Linux性能优化之cpu性能评估工具

三、Linux性能评估工具

1、cpu性能评估工具

(1)vmstat(系统默认自带)
利用vmstat命令可以对操作系统的内存信息、进程状态、CPU活动等进行监视。
linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。
常用方式:vmstat 3 5 表示每3秒更新一次输出信息,统计5此后停止输出。
(2)iostat(需要安装sysstat工具包)
iostat是IO statistics(输入输出统计)的缩写,主要的功能是对系统的磁盘I/O操作进行监视
常用方式:iostat -c 3 5 其中,-c表示显示cpu的使用情况,-d:显示磁盘的使用情况。
(3)uptime命令
uptime是监控系统性能最常用的一个命令,主要用来统计系统当前的运行状况,输出的信息依次为:系统现在的时间、系统从上次开机到现在运行了多长时间、系统目前有多少登录用户、系统在一分钟内、五分钟内、十五分钟内的平均负载。
(4)top命令

课时9:Linux性能优化之内存/磁盘性能评估工具

2、内存性能评估

(1)free 命令
free命令是监控linux内存使用状况最常用的指令
常见用法:free -m
(2)sar/pidstat
此两个命令主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存,设备IO.
三个公用参数:-u(获取CPU状态)、-r(获取内存状态)、-d(获取磁盘)
常用组合:
sar -u 3 获取cpu 3秒内的状态
pidstat -r -p 1 3 获取内存3秒内的状态

3、磁盘性能评估

(1)iostat -d 组合
iostat -d 2 3
(2)pidstat -d -p 31887 3
(3)sar -d 2 3

课时10:Linux性能优化之网络性能评估工具以及性能优化标准

4、网络性能评估

(1)ping命令
(2)netstat命令
netstat -r (查看路由情况)
netstat -i (查看网络接口状态)
(3)mtr/traceroute 命令
跟踪网络路由状态,推荐使用mtr,动态跟踪网络路由,用于排除网络问题非常方便。

四、系统性能分析标准

    ![image.png](https://cdn.nlark.com/yuque/0/2020/png/602328/1586506523657-ab5b33a1-1252-419b-8769-07e6382e366a.png#align=left&display=inline&height=158&name=image.png&originHeight=236&originWidth=638&size=64258&status=done&style=none&width=428)<br />其中:<br />%user:表示CPU处在用户模式下的时间百分比。<br />%sys:表示CPU处在系统模式下的时间百分比。<br />%iowait:表示CPU等待输入输出完成时间的百分比。<br />swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM。

课时11:系统无法执行su操作案例以及解决问题过程

1、 系统无法执行 su 操作

问题现象:su: warning: cannot change directory to /home/iiveylinux: Permission denied
su: /bin/bash: Permission denied
解决思路:
从上面错误提示可知是权限出现了问题,那么可以从权限入手进行排查,基本思路如下:

  - 用户目录/home/oracle 权限问题
  - su 程序执行权限问题
  - 程序依赖的共享库权限问题
  - selinux 问题导致
  - 系统根空间问题

课时12:Read-only file system 问题分析与解决

2、”Read-only file system” 问题分析与解决

问题现象:客户说网站无法添加内容了。
解决思路:

  - 网站程序可能出现问题了
  - 服务器磁盘故障

先试着touch 文件,可以的话,证明磁盘可写。不能创建文件的话,磁盘故障,先取消挂载,用fsck -y修复,然后再挂载上去。
image.png

课时13:基于动态、静态内容结合的网站优化案例

3、 基于动态、静态内容结合的网站优化案例

硬件环境: DELL R710 3 台、 32GB 内存、 CPU 2 颗 8 核、 磁盘 SATA 600GB+2TB
软件环境: nginx+tomcat 架构,通过 nginx 做负载均衡。
现象描述: 平时访问量小时,网站正常,当访问量稍大时,网站访问很慢,网站搞活动时,基本处于无法打开状态, 而 nginx 服务器带宽占最高在 30M 左右,后端 2 个 tomcat服务器占用带宽占用也在 30M 左右。
分析问题:
( 1) 硬件、 系统方面
( 2) 网络方面

( 3) 软件架构方面

( 4) 程序配置方面
解决问题:
( 1) 架构方面调整

upstream myserver {
ip_hash;
server 172.16.100.11:8080 weight=1 max_fails=2 fail_timeout=10s;
server 172.16.100.12:8080 weight=3 max_fails=2 fail_timeout=10s;
server 172.16.100.13:8080 weight=2 max_fails=2 fail_timeout=10s;
server 172.16.100.14:8080 weight=2 max_fails=2 fail_timeout=10s;
}
( 2) 网站劢、 静分离

location ~* .(gif|jpg|png|js|css)$ {
root /data/static/images/ROOT;
}
Nginx 中 location 匹配规则:
首先匹配 =,其次匹配^~, 然后是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

课时14:Tomcat JVM参数优化策略

( 3) Tomcat JVM 参数优化
优化参数:
-server -Xms3550m - Xmx3550m -Xmn1g -XX:PermSize=256M -XX:MaxPermSize=512m
整个堆内存大小 = 年轻代大小 + 年老代大小 + 持久代大小
-Xmx3550m:设置 JVM 最大堆内存 为 3550M
-Xms3550m:设置 JVM 初始堆内存 为 3550M
-Xmn2g:设置堆内存年轻代 大小为 2G。整个堆内存大小 = 年轻代大小 + 年老代大小 + 持久代大小
持久代一般固定大小为 64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大
-XX:PermSize=256M:设置堆内存持久代初始值为 256M
-XX:MaxPermSize=512M:设置持久代最大值为 512M。

Linux笔试题:

1、Linux系统中哪个目录保存了系统内核源码? /usr/src
2、在Linux系统中,通过使用shell的重定向输出功能,可以将命令执行的结果保存到指定的文本文件中。
3、 lsmod命令显示所有装载的模块
4、用来定义shell的环境变量:export
5、Apache的默认主配置文件名是:/etc/httpd/conf/httpd.conf
默认站点主目录:/var/www/html/
6、源码包安装Apache的默认伪用户是:daemon
7、运行级定义在 /etc/inittab 文件中