Linux 系统优化

本篇记录一些 Linux 系统常规优化项,可根据实际情况选择参考进行相应优化。

1. 包管理器优化

1.1. 新系统更新软件包

yum upgrade -y  # 刚装完系统后就立即执行,日后就不要轻易更新了
Bash

1.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
Bash

2. 修改主机名

hostnamectl set-hostname [主机名]  # 根据主机的作用修改主机名,见名知意
Bash

3. 添加主机名解析

vim /etc/hosts  # 编辑好之后,每台机器都发一份
 
172.16.10.11 [主机名]
......
Bash

4. 根据需要选择是否启动 SELinux

# 临时关闭
setenforce  0
 
# 永久关闭,修改完配置后重启主机
sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
 
# 查结果
grep "disabled" /etc/selinux/config
Bash

5. 根据需要选择是否启动防火墙

# 临时关闭
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 表中的所有规则
Bash

6. 配置时间同步服务

配置 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
Bash

时间服务器地址大全

7. 系统内核优化

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
Bash

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

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

上一篇
下一篇