本篇记录一些 Linux 系统常规优化项,可根据实际情况选择参考进行相应优化。
1. 包管理器优化
1.1. 新系统更新软件包
yum upgrade -y # 刚装完系统后就立即执行,日后就不要轻易更新了
Bash1.2. 更换软件包下载源
# 默认国外的yum源(软件仓库)可能比较慢,可以换成国内的。
# 示例为 centos7
# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 添加epel源
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
Bash2. 修改主机名
hostnamectl set-hostname [主机名] # 根据主机的作用修改主机名,见名知意
Bash3. 添加主机名解析
vim /etc/hosts # 编辑好之后,每台机器都发一份
172.16.10.11 [主机名]
......
Bash4. 根据需要选择是否启动 SELinux
# 临时关闭
setenforce 0
# 永久关闭,修改完配置后重启主机
sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# 查结果
grep "disabled" /etc/selinux/config
Bash5. 根据需要选择是否启动防火墙
# 临时关闭
systemctl stop firewalld
# 设置开机不启动
systemctl disable firewalld
iptables -t raw -F # 清除 raw 表中的所有规则
iptables -t mangle -F # 清除 mangle 表中的所有规则
iptables -t nat -F # 清除 nat 表中的所有规则
iptables -t filter -F # 清除 filter 表中的所有规则
Bash6. 配置时间同步服务
配置 chrony 与公网时间服务器同步时间:
# 安装
yum -y install chrony
# 修改配置文件
mv /etc/chrony.conf /etc/chrony.conf.bak
cat > /etc/chrony.conf << EOF
server ntp1.aliyun.com iburst minpoll 4 maxpoll 10
server ntp2.aliyun.com iburst minpoll 4 maxpoll 10
server ntp3.aliyun.com iburst minpoll 4 maxpoll 10
server ntp4.aliyun.com iburst minpoll 4 maxpoll 10
server ntp5.aliyun.com iburst minpoll 4 maxpoll 10
server ntp6.aliyun.com iburst minpoll 4 maxpoll 10
server ntp7.aliyun.com iburst minpoll 4 maxpoll 10
driftfile /var/lib/chrony/drift
makestep 10 3
rtcsync
allow 0.0.0.0/0
local stratum 10
keyfile /etc/chrony.keys
logdir /var/log/chrony
stratumweight 0.05
noclientlog
logchange 0.5
EOF
# 重启 chronyd 服务
systemctl restart chronyd.service
systemctl enable chronyd.service
systemctl status chronyd.service
Bash在服务器集群内可以让一台服务器与公网时间服务器同步时间,其他服务器与该服务器同步:
cat > /etc/chrony.conf << EOF
server [与公网同步时间的服务器ip或可解析的主机名] iburst minpoll 4 maxpoll 10
driftfile /var/lib/chrony/drift
makestep 10 3
rtcsync
allow 0.0.0.0/0
local stratum 10
keyfile /etc/chrony.keys
logdir /var/log/chrony
stratumweight 0.05
noclientlog
logchange 0.5
EOF
Bash大陆地区常见公网时间服务器地址:
# 阿里云
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
#
ntp1.chinacloud.com.cn
ntp2.chinacloud.com.cn
ntp3.chinacloud.com.cn
#
cn.pool.ntp.org
Bash7. 系统内核优化
7.1. ulimit 命令相关
# 基本语法
ulimit [选项] [限制值]
# 常用选项
-H # 硬限制只能 root 用户设置,一旦被设置以后就不能被非root用户修改
-S # 软限制,可以由非root用户修改
-a # 显示所有当前限制
-n # 打开文件描述符数量
-u # 用户最大进程数
-s # 栈大小(Stack)
-v # 虚拟内存(Virtual Memory)
-m # 物理内存(RSS)
-t # CPU 时间(秒)
-f # 创建文件的最大大小
-c # 核心转储文件大小(Core Dump)
-l # 内存锁定大小(Locked Memory)
# 示例:
ulimit -Hn 65535 # 硬限制设打开文件数 65535
ulimit -Sn 5000 # 软限制设打开文件数 5000(不超过硬限制 65535)
# 如果既没有指定-H选项也没有指定-S选项,且为root用户则硬限制和软限制都会被设置。如果是普通用户则只设置软限制。
ulimit -n 5000
# ulimit 设定的值可以是一个数值,也可以是一些特定的值,比如:hard,soft,unlimited,分别代表当前硬件限制、当前软件限制、不限制。
Bash上述命令都是临时设置,永久设置方式如下:
# 编辑 /etc/security/limits.conf
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf
# 直接修改limit.conf需要重启机器才能生效
* hard nofile 65535
* # 表示要限制的用户,* 表示所有用户
hard # 设定限制类型
nofile # 要限制的资源类型
65535 # 限制的值
# 在/etc/security/limits.d/下放配置文件优先级更高,并且无需重启系统,退出当前终端重新进入即可生效
cat > /etc/security/limits.d/limits.conf <<'EOF'
* soft nofile 65535
* hard nofile 131070
EOF
Bash7.2. 调整 pid_max
pid_max
是 Linux 内核中的一个参数,用于定义 系统全局的进程 ID(PID)的最大数值。它决定了系统中同时可以存在的进程、线程和任务(包括轻量级进程 LWP)的最大数量。
# 32 位系统最大值 32768 (2^15),PID 范围:0 ~ 32767
# 64 位系统最大值 4194304 (2^22),PID 范围:0 ~ 4194303
# 查看当前系统值,通常默认值即可,按需调整
cat /proc/sys/kernel/pid_max
131072
# 临时调整
echo 4194303 > /proc/sys/kernel/pid_max
# 永久调整
echo "kernel.pid_max= 4194303" | tee -a /etc/sysctl.conf
sysctl -p
Bash7.3. 其它内核参数
# 设置
cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
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 = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
net.ipv4.ip_forward = 1
EOF
# 生效
sysctl -p
Bash