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_fin_timeout = 2
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_tw_reuse = 1 和 net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
○ 作用:开启SYN Cookie防护,当半连接队列(tcp_max_syn_backlog)溢出时,通过算法生成Cookie验证SYN请求,抵御SYN洪水攻击。
○ 注意事项:仅在攻击场景下启用,正常负载下可能影响性能,且需确保系统有足够的CPU资源处理Cookie计算。
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
○ 作用:设置TCP保活探测的初始时间(秒),即连接空闲多久后发送探测包检测对方是否存活。
○ 调优:默认值通常为7200秒(2小时),降低该值可更及时检测失效连接,但频繁探测可能增加网络开销,需根据应用需求平衡。
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
○ 作用:定义本地可用端口范围,扩大端口池可减少端口耗尽问题。
○ 建议:对于高并发应用(如负载均衡器、游戏服务器),建议将范围扩展至更大的区间(如1024~65535),但需注意部分端口可能被系统预留。
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
○ 作用:设置TCP半连接队列最大长度,即未完成的SYN握手连接数上限。
○ 调优:提高该值可增强抗SYN攻击能力,但需配合net.core.somaxconn和应用程序的listen backlog参数协同调整。
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
○ 作用:限制系统允许存在的TIME_WAIT套接字数量,超过时主动关闭旧连接。
○ 风险提示:过低的设置可能导致新连接无法复用端口,需根据服务器并发量和连接频率动态调整。
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
○ 作用:路由缓存垃圾回收间隔(秒),降低该值可加速过期路由清理,提升路由表效率。
○ 适用场景:适用于频繁变动网络拓扑的环境(如容器集群或动态云网络)。
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1 和 net.ipv4.tcp_synack_retries = 1
○ 作用:减少TCP三次握手的重试次数,加速失败连接的释放。
○ 副作用:在网络不稳定场景下可能导致部分合法连接失败,需根据实际丢包率权衡。
net.ipv4.tcp_syn_retries = 1 和 net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
○ 作用:设置全连接队列(已完成三次握手但未由应用程序accept的连接)上限。
○ 联动调优:需确保该值大于等于应用程序listen()函数的backlog参数,避免因队列溢出导致连接丢失。
et.core.somaxconn = 16384
net.ipv4.tcp_max_orphans = 16384
○ 作用:限制系统可维护的孤儿连接数(如一方突然断开但未释放的连接)。
○ 风险:超过该值后内核将开始丢弃新连接,需监控netstat -s中的"orphans processed"指标调整。
net.ipv4.ip_forward = 1
○ 作用:启用IP转发功能,适用于路由器或网关场景。
○ 安全提示:若服务器无需转发功能,建议保持默认关闭状态以增强安全性。
net.ipv4.ip_forward = 1

 

九、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即可立即分配的内存量”,是评估系统内存健康状态的重要指标。
free -h命令解析:内存使用详情

 

十、网络优化

  物理服务器。

 

  

 


  

  

 

  

 

posted @ 2025-06-11 00:51  张仁国  阅读(29)  评论(0)    收藏  举报
目录代码