Linux系统优化
一、优化显示输出
[root@localhost ~]#
[root@localhost ~]# echo $PS1 [\u@\h \W]\$
系统变量 PS1 提示符设定。
/etc/bashrc或/etc/bash.bashrc 每个交互式shell的系统级的启动脚本都定义了一些函数和别名。
[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\\$

二、登录和欢迎信息
vi /etc/motd
三、配置yum仓库与包更新
装完系统可能自带一些yum仓库:连接的都是国外的源。
1、备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/ curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3.添加epel源 curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
在 CentOS 7 中,yum update 和 yum upgrade 1、相同点:都会更新所有包(包括软件与内核) 2、不同点 yum update更新的时候会保留过时的包,这对依赖老包的应用很友好 yum upgrade更新的时候会删除过时的包,如果你系统中所有的应用全都为rpm 包,那upgrade倒是不会对你有影响,因为都会一起跟着更新。但是如果你 安装的包里有自己编译安装的,而编译安装的包会依赖某个特定版本的rpm包 那upgrade升级之后,很有可能会造成你编译安装包的不可用 综上,如果是刚装系统,那就用upgrade,否则还是用update靠谱些 在rockylinux中,yum命令都链接到了dnf-3上 而在 DNF 中,,在dnf-3中,dnf update 与 dnf upgrade 是没有区别的。 具体而言,两者都是用于更新系统上已经安装的软件包到最新可用版本
一些常用的库:
yum install net-tools vim tree htop iftop iotop bash-completion bash-completion-extras lrzsz sysstat sl lsof unzip telnet nmap nc psmisc dos2unix bash-completion wget nethogs ntpdate nfsutils rsync glances gcc gcc-c++ glibc yum-utils httpd-tools -y yum -y install tree nmap sysstat lrzsz telnet bash-completion bash-completion-extras vim lsof net-tools rsync ntpdate nfs-utils
四、规范系统主机名
集群,ip地址设置成静态的。如果ip地址发生变化,配置文件也要跟着修改比较麻烦。
用主机名访问需要用到 /etc/hosts 文件

左边是ip地址,右边是主机名字。
五、关闭SELinux
临时关闭
setenforce 0
永久关闭 /etc/sysconfig/selinux
六、关闭防火墙
临时关闭:
systemctl stop firewalld
开机就关闭:
systemctl disable firewalld
iptables -t nat -F iptables -t mangle -F iptables -t raw -F iptables -t filter -F
七、配置自动同步时间
集群
自己搭建集群服务器(集群大的情况)
公网的时间服务器
集群内的每个主机都有自己的同步时间的客户端软件。
[root@localhost.localdomain ~]# ps aux |grep chronyd chrony 610 0.0 0.1 84432 3232 ? S Jun05 0:00 /usr/sbin/chronyd -F 2 root 15722 0.0 0.1 3872 1976 pts/0 S+ 19:43 0:00 grep --color=auto chronyd
/etc/chrony
/etc/chrony.conf
chronyc sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^+ 110.42.98.138 2 10 377 740 -1043us[-1043us] +/- 31ms ^+ 2408:4005:3c2:e600:357b:> 2 10 377 348 -665us[ -665us] +/- 37ms ^- 2402:4e00:c050:2400:32d6> 3 10 377 653 -1136us[-1136us] +/- 25ms ^* 2408:4002:1193:3405:65d:> 2 10 377 886 +4283us[+4556us] +/- 23ms
[root@localhost.localdomain ~]# chronyc sources -v .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current best, '+' = combined, '-' = not combined, | / 'x' = may be in error, '~' = too variable, '?' = unusable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^+ 110.42.98.138 2 10 377 794 -1043us[-1043us] +/- 31ms ^+ 2408:4005:3c2:e600:357b:> 2 10 377 402 -665us[ -665us] +/- 37ms ^- 2402:4e00:c050:2400:32d6> 3 10 377 707 -1136us[-1136us] +/- 25ms ^* 2408:4002:1193:3405:65d:> 2 10 377 940 +4283us[+4556us] +/- 23ms
服务端用的是一堆公网上的时间服务器。
安装
yum install chrony -y
先备份:
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

在客户机上准备连

先备份:
mv /etc/chrony.conf /etc/chrony.conf.bak
cat > /etc/chrony.conf << EOF server 服务端的ip地址或可解析的主机名 iburst driftfile /var/lib/chrony/drift makestep 10 3 rtcsync local stratum 10 keyfile /etc/chrony.key 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
验证:
chronyc sources -v
八、系统内核优化
1、ulimit命令 可以控制打开的文件数,还可以控制用户能开启的进程数。
ulimit -n
n表示文件描述符,软限制和硬限制
ulimit -Sn
ulimit -Hn
ulimit -u ulimit -Hu ulimit -Su
永久设置:
若服务器处理大量并发连接,可执行 ulimit -Sn 65536 临时提升软限制,再通过修改/etc/security/limits.conf(如添加 * soft nofile 65536)永久调整。
对于高负载服务器,可设置 * soft nproc 4096 允许普通用户启动更多进程,但需注意系统整体资源分配。
其它内核优化:
#设置 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 syncookies开启后用来防止syn洪水攻击
net.ipv4.tcp_fin_timeout = 2 作用:定义TCP连接在FIN_WAIT_2状态下的超时时间(秒)。 调优:降低该值可减少资源占用,避免大量FIN_WAIT状态连接堆积,适用于高并发短连接场景(如Web服务器)。但过低的设置可能导致正常连接被过早释放。
net.ipv4.tcp_tw_reuse = 1 和 net.ipv4.tcp_tw_recycle = 1 ○ 作用:启用TIME_WAIT(TW)套接字复用和快速回收机制。 ○ 调优:在高并发场景下,允许新连接复用处于TIME_WAIT状态的端口,减少端口耗尽风险。但需注意,tcp_tw_recycle在NAT环境下可能导致连接问题(已从Linux 4.12内核中移除),建议根据网络环境谨慎启用。
net.ipv4.tcp_syncookies = 1 ○ 作用:开启SYN Cookie防护,当半连接队列(tcp_max_syn_backlog)溢出时,通过算法生成Cookie验证SYN请求,抵御SYN洪水攻击。 ○ 注意事项:仅在攻击场景下启用,正常负载下可能影响性能,且需确保系统有足够的CPU资源处理Cookie计算。
net.ipv4.tcp_keepalive_time = 600 ○ 作用:设置TCP保活探测的初始时间(秒),即连接空闲多久后发送探测包检测对方是否存活。 ○ 调优:默认值通常为7200秒(2小时),降低该值可更及时检测失效连接,但频繁探测可能增加网络开销,需根据应用需求平衡。
net.ipv4.ip_local_port_range = 4000 65000 ○ 作用:定义本地可用端口范围,扩大端口池可减少端口耗尽问题。 ○ 建议:对于高并发应用(如负载均衡器、游戏服务器),建议将范围扩展至更大的区间(如1024~65535),但需注意部分端口可能被系统预留。
net.ipv4.tcp_max_syn_backlog = 16384 ○ 作用:设置TCP半连接队列最大长度,即未完成的SYN握手连接数上限。 ○ 调优:提高该值可增强抗SYN攻击能力,但需配合net.core.somaxconn和应用程序的listen backlog参数协同调整。
net.ipv4.tcp_max_tw_buckets = 36000 ○ 作用:限制系统允许存在的TIME_WAIT套接字数量,超过时主动关闭旧连接。 ○ 风险提示:过低的设置可能导致新连接无法复用端口,需根据服务器并发量和连接频率动态调整。
net.ipv4.route.gc_timeout = 100 ○ 作用:路由缓存垃圾回收间隔(秒),降低该值可加速过期路由清理,提升路由表效率。 ○ 适用场景:适用于频繁变动网络拓扑的环境(如容器集群或动态云网络)。
net.ipv4.tcp_syn_retries = 1 和 net.ipv4.tcp_synack_retries = 1 ○ 作用:减少TCP三次握手的重试次数,加速失败连接的释放。 ○ 副作用:在网络不稳定场景下可能导致部分合法连接失败,需根据实际丢包率权衡。
net.core.somaxconn = 16384 ○ 作用:设置全连接队列(已完成三次握手但未由应用程序accept的连接)上限。 ○ 联动调优:需确保该值大于等于应用程序listen()函数的backlog参数,避免因队列溢出导致连接丢失。
net.ipv4.tcp_max_orphans = 16384 ○ 作用:限制系统可维护的孤儿连接数(如一方突然断开但未释放的连接)。 ○ 风险:超过该值后内核将开始丢弃新连接,需监控netstat -s中的"orphans processed"指标调整。
net.ipv4.ip_forward = 1 ○ 作用:启用IP转发功能,适用于路由器或网关场景。 ○ 安全提示:若服务器无需转发功能,建议保持默认关闭状态以增强安全性。
九、OOM与内存相关优化
OOM是Linux系统的一种内存保护机制。
当Linux系统内存不够用的情况下到底会怎么做?流程是什么?
先或者同时释放cache或者swap分区,最终会随机终止几个进程。OOM Killer(Out of Memory Killer)
内核优化参数 /proc/sys/vm/swappines 控制swap分区 和 buff/cache释放比列。
[root@localhost.localdomain ~]# cat /proc/sys/vm/swappiness 30
free -h 各部分含义:total used free shared buff/cache available available的计算方式

执行free -h命令可获取系统内存的直观统计,各列含义深入分析如下: total:系统总内存(物理内存+swap)。 used:已被使用的内存,包含进程实际使用的内存、内核缓存(如buff/cache)及不可回收的分配。 free:完全空闲的内存,可直接用于新分配。 shared:被多个进程共享的内存(如动态链接库),现代Linux中该值通常较低,因共享内存机制已优化。 buff/cache:内核缓存,分为两部分:buff:用于块设备(如磁盘)的读写缓存,加速数据访问。cache:文件系统的页缓存,存储最近访问的文件内容,减少磁盘IO。 available:系统实际可用的内存,计算公式较为复杂(内核动态计算),通常包括: free内存 部分可回收的buff/cache(如未被锁定的缓存页) 部分可压缩或交换的内存页 available值旨在反映“无需触发OOM即可立即分配的内存量”,是评估系统内存健康状态的重要指标。
十、网络优化
物理服务器。

浙公网安备 33010602011771号