Linux22--系统优化
1 硬件层面优化
1.1 开启VT和HT
# VT: Intel Virtualization Technology 虚拟化技术
# HT: Hyper-Threading 超线程技术
就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片
让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件
减少了CPU的闲置时间,提高的 CPU 的运行效率
# 开启VT
BIOS系统中 ---> Configuration ---> Intel Virtualization Technology 改为 Enabled 启动
# 开启HT
BIOS系统中 ---> Advanced ---> CPU Configuration ---> Hyper-Threading 改为 Enabled 启动
1.2 关闭CPU节能
# 1.BIOS系统中 配置关闭 主板不同,自行百度
# 2.系统层面进行设置,配置方法如下:
for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
do
[ -f $CPUFREQ ] || continue
echo -n performance > $CPUFREQ
done
1.3 硬盘问题
# 问题:
一台服务器的硬盘数过多,可能会有盘符飘逸问题
# 解决:
单块盘做raid0,可解决服务器盘符飘逸问题
# 按照经验来看:
1. 通过1T容量的硬盘要对应1G的内存,可以按照这个比例来购买主机
2. xfs文件系统用ssd(固态硬盘)做日志盘,无需格式化,裸盘就可以
3.日志盘大小 = (网络带宽与硬盘带宽取小 * 脏数据最大同步时间) *2
2 软件层面优化
2.1 yum源处理、常用软件包安装
### 1 先在测试环境,配置好yum源
默认国外的yum源(软件仓库)比较慢,所以换成国内的
# 1.1 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 1.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
# 1.3 添加epel源
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
### 2 更新yum 以及 安装常用软件包 将部署过程中安装的包缓存本地
yum update -y # 刚装完系统后就立即执行,日后就不要轻易更新了
yum -y install tree nmap sysstat lrzsz telnet bash-completion bash-completion-extras vim lsof net-tools rsync ntpdate nfs-utils
### 3 将所有主机上的软件包汇总到一起,做成一个自己的yum源用来后期使用
2.2 规范系统主机名
### 集群化作业,主机很多,需要规范各主机的主机名
hostnamectl set-hostname 主机名 # 主机名能够反映出主机的作用即可
2.3 DNS主机间相互解析
# 添加hosts文件,实现集群主机之间 相互用主机名 解析
vim /etc/hosts # 编辑好之后,每台机器都发一份
# 网络IP地址 主机名或域名 主机名的多个别名
172.16.10.11 nc1 ceph-deploy
172.16.10.12 nc2
172.16.10.13 nc3
172.16.10.14 cs1
172.16.10.15 cs2
172.16.10.16 cs3
2.4 同步系统时间
### 将每分钟同步系统时间,做成root用户的定时计划任务
# 给定时任务加上注释:定时同步时间
echo '# Timing Synchronization time' >>/var/spool/cron/root
# 定时任务:同步系统时间
echo '0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root
# 查看计划任务
crontab -l
3 安全优化
3.1 禁用selinux
### 0 查看selinux状态
sestatus
getenforce
# selinux的配置文件路径:/etc/selinux/config
参数:
永久开启:enforcing
临时关闭:permissive
永久关闭:disabled
### 1 临时禁用
setenforce 0 # 设置立即生效
0:临时禁用
1:临时启用
### 2 永久禁用 修改 /etc/selinux/config文件 参数
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# 注:
如果已经启用了selinux,则修改Linux文件不会立即生效,需要重启,
或者执行 setenforce 0 命令
3.2 关闭firewalld 防火墙
### 1 各类型的防火墙
云主机 ====> 安全组
firewalld ====> 防火墙
iptables ====> IP路由表 防火墙
### 2 防火墙开关的情况:
服务器允许外网访问时 : 打开
服务器只允许内网使用时 : 关闭
服务器允许外网访问时,且处于高并发 : 关闭 # 影响服务器响应性能,这种情况下只能在前端加更好的硬件防火墙了
### 3 关机防火墙
systemctl disabled --now firewalld # 重启生效或再加上setenforce 0
disable 禁止开启
--now 立即执行
3.2.1 systemctl 命令
### 1 systemctl 命令 !!!
systmectl 参数 选项 服务名
# 1 服务自启动相关
systemctl is-enabled firewalld # 查看服务是否自启动
systemctl disable firewalld # 禁止自启动
systemctl enable firewalld # 设置自启动
# 2 服务运行相关
systemctl status firewalld # 查看状态
systemctl start firewalld # 开启
systemctl stop firewalld # 关闭
systemctl restart firewalld # 重启
# 3 查看系统服务相关
systemctl list-units --type=service # 列出系统所有服务的启动情况
systemctl list-unit-files | grep enabled # 列出所有的自启动服务
systemctl list-dependencies docker.service # 列出服务层级和依赖关系
### 2 旧系统的 服务命令 service
设置服务自启动:chkconfig --level 3 docker on
禁止服务自启动:chkconfig --level 3 docker off
启动服务:service docker start
关闭服务:service docker stop
重启服务:service docker restart
服务状态:service docker status
列出系统所有服务的启动情况:chkconfig --list
查看服务是否自启动:chkconfig --list docker
列出服务层级和依赖关系:systemctl list-dependencies docker.service
3.3 系统安全最小化原则
### 最小化原则 即多一事不如少一事
# 1.安装Linux系统最小化
即 选包最小化,yum安装软件包也要最小化,无用的包不装
# 2.开机自启动服务最小化
即 无用的服务不开启自启动
# 3.操作命令最小化。
eg:能用 rm -f test.txt 就不用 rm -rf test.txt
# 4.登录Linux用户最小化
平时没有特殊需求不登录root,用普通用户登录即可
# 5.普通用户授权权限最小化
即只给用户必需的 管理系统的命令
# 6.Linux系统文件及目录的权限设置最小化
禁止随意创建、更改、删除文件
3.4 系统加密与解密
详见:Linux00--系统分区、启动流程、运行级别、破解root密码、系统加密
3.5 ssh秘钥远程登录
### 0 前提
关闭selinux
### 1 ssh-keygen 命令
用于为 SSH 生成、管理和转换认证密钥,支持RSA和DSA两种认证密钥
SSH密钥默认,保留在 ~/.ssh 目录中
id_rsa # 私钥文件
id_rsa.pub # 公钥文件
known_hosts #
# 格式:
ssh-keygen [选项]
-b 指定密钥长度
# 采用长度1024bit的密钥对,b=bits,最长4096,不过没啥必要
-C 添加注释
-N 指定此密钥对的密码 # 给私钥再加密一下,若是使用秘钥登录时,需要输入私钥的密码 一般不设置
# 若指定此参数, 则命令执行过程中就不会出现交互确认密码的信息了
-f 指定用来保存密钥的文件名
-t 指定要创建的密钥类型 rsa 和 dsa # 默认为rsa算法
### 2 ssh-copy-id 命令
1.可把本地主机的公钥复制到,远程主机的authorized_keys文件上
2.给远程主机的 用户主目录(home)、~/.ssh、和~/.ssh/authorized_keys设置合适的权限
3.会输入user账户的密码
# 格式:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
-i 指定公钥文件 # 不指定,则使用默认 ~/.ssh/identity.pub 公钥
# 注: 是将key写到远程机器的 ~/.ssh/authorized_key文件中
-p 连接服务器的端口 # 默认为 22
### 3 eg: 通过ssh秘钥,远程免密登录服务器
# 0.修改服务器ssh的配置
vim /etc/ssh/sshd_config
RSAAuthentication yes # 是否使用纯的RSA 认证!
PubkeyAuthentication yes # 是否允许公钥Public Key
AuthorizedKeysFile .ssh/authorized_keys # 免密登录用户的 授权秘钥文件
PermitRootLogin no # 是否允许root登入 建议为no
PasswordAuthentication yes # 允许密码登录,根据你的情况设置
# 1.客户端上生成秘钥
秘钥对 需要在本机上生成,然后把公钥放到服务器相应用户的~/.ssh目录
ssh-keygen
系统会询问你文件名和秘钥密码,可以一路回车过去
# 以下2、3、4步 可以合成一步
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
# 2.把客户端的公钥发送到服务器
scp ~/.ssh/id_rsa.pub 登录用户@服务器ip:/home/登录用户/.ssh/id_rsa.pub
# 3.秘钥写入到authorized_keys文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 4.调整目录的权限
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
# 5.客户端登录服务器
ssh user@server
### 4 Xshell 可管理ssh秘钥
# 1.新生成ssh秘钥对
Xshell ---> 工具 ---> 新建用户秘钥生成向导
# 2.管理Xshell 已连接的主机秘钥
Xshell ---> 工具 ---> 主机秘钥管理者
# 3.管理Xshell 本地的用户秘钥
Xshell ---> 工具 ---> 用户秘钥管理者
3.6 修改SSH远程登录设置
### 修改ssh服务端 sshd服务 的远程登录设置
vim /etc/ssh/sshd_config
# 0.更改配置前进行备份 !!! 良好习惯
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori
# 1.禁止DNS进行反向解析
sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
# 2.禁止GSS认证,减少连接时产生的延迟
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
# 3.修改默认端口:ssh默认端口22 但皆知 故修改
sed -i 's/#Port.*/Port 6666/' /etc/ssh/sshd_config
# 4.其他修改:禁用root登录,以及空密码登录
RSAAuthentication yes # 是否使用纯的RSA 认证!
PubkeyAuthentication yes # 是否允许公钥Public Key
AuthorizedKeysFile .ssh/authorized_keys # 免密登录用户的 授权秘钥文件
PermitRootLogin no # 是否允许root登入 建议为no
PasswordAuthentication yes # 允许密码登录,根据你的情况设置
PermitEmptyPasswords no # 是否运行密码为空
# 重启服务生效
systemctl restart sshd
# 测试
ssh root@192.168.12.17 -p 6666
3.7 更高级的SSH安全策略
### 1 更改SSH监听的IP,使其仅监听内网IP
cat /etc/ssh/sshd_config
ListenAddress 10.0.0.7 # 企业仅指定监听本机内网IP地址
### 2 通过防火墙限制,仅能使用内网IP连接此服务器
iptables -I INPUT -p tcp --dport 52113 -s 10.0.0.0/24 -j ACCEPT # 默认规则为DROP时的限制SSH命令
### 3 通过拨号到VPN服务器,然后从局域网访问这些服务器,提升安全性
4 开机优化
4.1 设置开机运行级别
# 设置运行级别为3 命令行模式(多用户模式,有网络)
systemctl set-default multi-user.target
4.2 精简开机启动项
### 0 企业环境新装Linux系统,有必要保留的开机自启动服务有5个
sshd # 远程连接Linux服务器
rsyslog # 日志相关软件
操作系统提供的一种机制,系统的守护程序通常会使用rsyslog程序
将各种信息写到各个系统日志文件中,在CentOS 6以前此服务的名字为syslog
network # 激活/关闭各个网络接口
crond # 定时计划任务 用于周期性地执行系统及用户配置的任务计划
sysstat # sysstat是一个软件包,包含监测系统性能及效率的一组工具
sysstat软件包主要工具为:
iostat工具 # 提供CPU使用率及硬盘吞吐效率的数据
mpstat工具 # 提供与单个或多个处理器相关的数据
sar工具 # 负责收集、报告并存储系统活跃的信息
### 1 查看自启动的服务项
systemctl list-unit-files | grep enable
### 2 关闭开机自启动服务
systemctl disable abrt-ccpp.service
systemctl disable abrt-oops.service
systemctl disable abrt-vmcore.service
systemctl disable abrt-xorg.service
systemctl disable abrtd.service
systemctl disable accounts-daemon.service
systemctl disable atd.service
systemctl disable auditd.service
systemctl disable autovt@.service
systemctl disable avahi-daemon.service
systemctl disable bluetooth.service
systemctl disable cups.service
systemctl disable dbus-org.bluez.service
systemctl disable dbus-org.fedoraproject.FirewallD1.service
systemctl disable dbus-org.freedesktop.Avahi.service
systemctl disable dbus-org.freedesktop.ModemManager1.service
systemctl disable dbus-org.freedesktop.NetworkManager.service
systemctl disable dbus-org.freedesktop.nm-dispatcher.service
systemctl disable display-manager.service
systemctl disable dmraid-activation.service
systemctl disable firewalld.service
systemctl disable gdm.service
systemctl disable irqbalance.service
systemctl disable iscsi.service
systemctl disable ksm.service
systemctl disable ksmtuned.service
systemctl disable libstoragemgmt.service
systemctl disable libvirtd.service
systemctl disable lvm2-monitor.service
systemctl disable mcelog.service
systemctl disable mdmonitor.service
systemctl disable microcode.service
systemctl disable ModemManager.service
systemctl disable multipathd.service
systemctl disable NetworkManager-dispatcher.service
systemctl disable NetworkManager.service
systemctl disable postfix.service
systemctl disable qemu-guest-agent.service
systemctl disable rngd.service
systemctl disable rtkit-daemon.service
systemctl disable smartd.service
systemctl disable spice-vdagentd.service
systemctl disable systemd-readahead-collect.service
systemctl disable systemd-readahead-drop.service
systemctl disable systemd-readahead-replay.service
systemctl disable tuned.service
systemctl disable vgauthd.service
systemctl disable vmtoolsd.service
4.3 别名及环境变量优化
# 设置
cat > /etc/profile.d/color.sh << 'EOF'
alias ll='ls -l --color=auto --time-style=long-iso'
PS1="\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\\h \[\e[36;40m\]\w\[\e[0m\]]\[\e[32;1m\]\\$ \[\e[0m\]"
export HISTTIMEFORMAT='%F-%T '
EOF
# 重新加载生效
source /etc/profile
4.4 登录提示信息
4.4.1 登录前 提示信息
# 登录前 提示信息
/etc/issue # 登录画面显示的信息(重启机器后,在本机看到的登录界面内容)
/etc/issue.net # 提供给telnet远程登录程序使用的 都不用了
默认情况下/etc/issue文件和/etc/issue.Net内容一样
# 注:
1. 通常会去除系统及内核版本登录前的屏幕显示
清空/etc/issue、/etc/issue.net的内容
2. telnet由于不安全已经很少使用了,都是以ssh代替
4.4.2 登录后 提示信息
# 系统登录成功后显示的信息
vim /etc/motd
# eg:
cat /etc/motd
+--------------------------------------------+
| |
| 你当前登录的是支付业务后台数据库服务 |
| 请不要删库 |
| |
+--------------------------------------------+
5 网络优化
5.1 关闭NetworkManager
### 两种网络管理工具 两个都配置会起冲突
network : 对网卡的配置 # 常使用
NetworkManager : 在网络断开的时候,会清理路由
若一些自定义的路由,没有加入到NetworkManager的配置文件中
路由就被清理掉,网络连接后需要自定义添加上去
# 关闭
systemctl stop NetworkManager
# 禁止自启动
systemctl disable NetworkManager
5.2 禁用主机被ping
# 主机若是能被ping,会消耗服务器主机大量资源
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
5.3 网卡绑定
### 0 详细
https://blog.csdn.net/QTM_Gitee/article/details/118275444
### 1 网卡绑定
基于逻辑化的模块管理,它将多个物理网卡组合成一个逻辑接口(虚拟网卡)
从而提高网络带宽和冗余性
Rhel6 bond
Rhel7以后 team # 官方推荐使用
### 2 用途
1.提高网卡的吞吐量
2.增强网络的高可用,用于负载平衡、故障转移和高可用性集群等方案中
### 3 绑定模式(team)
broadcast : 广播模式
activebackup : 主备模式
roundrobin : 轮巡模式
loadbalance : 负载均衡
lacp : lacp链路聚合控制协议 # 相当bond 的模式4
# loadbalance : 负载均衡 即主动和被动负载平衡
在主动模式中,通过使用最新流量统计不断进行流量再平衡,以便尽可能平均分配流量
在静态模式中,流量会在可用链接之间随机分配。鉴于较低的处理开销,这样有速度优势
在高流量应用程序中通常首选此方式
因为流量通常由多个要在可用链接间随机分配的流组成
使用这种方式时,无需 teamd 介入即可完成负载分布
所有网卡绑定都采用被动模式,既不配置 "tx_balancer": {"name": "basic"}
如果配置为主动模式,会有网路延迟产生
# team的json格式配置文件 案例
ls /usr/share/doc/teamd-*/example_configs/
### 4 案例:负载均衡模式
# 1.备份原来的配置文件
mv /etc/sysconfig/network-scripts/ifcfg-ens* bak/
# 2.生成绑定网卡team0 及 team0的配置文件
nmcli con add type team ifname team0 con-name team0 config '{"runner": {"name": "loadbalance","tx_balancer": {"name": "basic"} }}'
# nmcli的几个参数说明
connection add :添加新的连接 # 注:connection 可缩写 con
con-name :连接名,可以起名为slave1这种名字
type :设备类型
ifname :接口名,这里填写网卡的名字
# 3.配置team0的IP地址等信息
nmcli con modify team0 ipv4.addresses '10.0.0.139/24' ipv4.method manual ipv4.gateway 10.0.0.2
# 4.为team0添加两块实际网卡
nmcli con add type team-slave ifname ens33 con-name team0-port1 master team0
nmcli con add type team-slave ifname ens34 con-name team0-port2 master team0
# 5.重新载入连接配置
nmcli con reload
# 6.启动team0
nmcli con up team0
# 补充:
# 查看网卡连接信息
nmcli connection show
nmcli con show
# 查看物理网卡信息
nmcli dev
# 7.查看team0状态
teamdctl team0 state
5.4 巨帧 Jumbo frames
### 修改网卡的最大传输单元
ifconfig eth0 mtu 9000
修改万兆网卡 MTU=9000,交换机也要设置,而且对端的MTU也要=9000
否则会出错误 最大传输单元
以太网(走arp协议,通过mac通信)内,一般为1500(千兆网卡)
这样发送大文件就需要经过:切片 ---> 发送 ---> 重组
# 详细:
https://www.cnblogs.com/linhaifeng/articles/13959997.html
# 注:
在经过交换网络设备时,仅仅修改主机端的MTU值(最大传输单元)是不行的
还需要交换网络设备上,开启 巨帧(jumbo frames)功能
6 系统内核优化
6.1 用户级的系统资源控制
### ulimit命令介绍
Linux系统中用于控制shell程序的资源限制的命令
可以用来设置和查看各种资源限制,包括最大文件大小、最大进程数、最大打开文件数等
# 1 格式
ulimit 选项 参数值
# 选项
-a : 显示查看所有资源限制
-u : 用户最大能打开的进程数 # 每个用户,能同时开启的 最大进程数量
-n : 用户最大能打开的文件描述符数 # 每个用户级的进程,能同时打开的 最大文件数量
-H : 对给定资源进行 硬限制 设置 hard limit
-S : 对给定资源进行 软限制 设置 soft limit
# 参数值
具体的参数值 或者 特定值 unlimited 代表不限制
# 2 软硬限制
1.硬限制一旦被设置后,就不能被非root用户修改
2.软限制可以增长,达到硬限制
3.若-H选项和-S选项都未指定,则硬限制和软限制都会被设置
6.1.1 用户最大进程数
### 设置用户级所能打开的最大进程数目:-u选项
ulimit -u 3
# 注:
ulimit -u 3 # 每个用户,能同时开启的最大进程数均只有3,而不是累计到一起总共有3个
### eg:
# 1.root用户登录
useradd egon01
useradd egon02
ulimit -u 3
# 2.切换到普通用户 egon01
su - egon01 # 当前有一个正在运行的bash进程
sleep 1000 &
sleep 1000 &
sleep 1000 & # 出错:资源暂时不可用
6.1.2 用户级进程最大文件数
### 1 设置用户级所能分配到的最大文件描述符数量:-n选项
ulimit -n 12 # 每个用户级进程,能同时打开的最大文件数最大只有12个
### 2 文件描述符
进程每打开一个文件,linux操作系统内核就会为 该打开的文件 分配一个编号(非负整数)
该编号称之为文件描述符(File Descriptor) 或者 文件句柄(File handle)
### 3 文件打开后的处理逻辑
进程 ---> 文件描述符(数字) ---> 操作系统内核 ---> 一个打开的具体文件
即内核(kernel)就是利用文件描述符来访问文件
在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开
但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统
# 更多关于描述符的概念
https://www.cnblogs.com/linhaifeng/articles/13959014.html
### 4 eg: 查看进程的文件描述符
# 1.用python创建文件脚本
vim test1.py
import os, time
print(os.getpid())
with open('a.txt', 'w+') as f1, open('b.txt', 'w+') as f2:
time.sleep(10000)
# 2.启动python进程
python test1.py &
29527 # 打印当前python进程的id
# 3.查看python进程的文件描述符fd File Descriptor
ll /proc/29527/fd
total 0
lrwx------ 1 root root 64 Nov 23 15:43 0 -> /dev/pts/1
lrwx------ 1 root root 64 Nov 23 15:43 1 -> /dev/pts/1
lrwx------ 1 root root 64 Nov 23 15:43 2 -> /dev/pts/1
lrwx------ 1 root root 64 Nov 23 15:43 3 -> /root/a.txt
lrwx------ 1 root root 64 Nov 23 15:43 4 -> /root/b.txt
# 解析:
文件描述符0 代表标准输入 /dev/pts/1 是 远程连接的虚拟终端 文件
1 代表标准正确输出 2 代表标准错误输出
0/1/2 都指向 连接的虚拟终端 文件,表示该进程都由该终端输入输出
# 正常的进程,默认都至少会有这三个文件描述符
文件描述符3/4 分别指向进程打开的文件
# 故:重定向的原理,就是修改 进程的文件描述符 指向的文件
echo 123 1 > 1.txt 2 > 2.txt
# 把echo命令的结果 1(标准正确输出)
原本指向 终端文件(/dev/pts/1)
修改成了具体的1.txt文件
6.1.3 永久配置
### 1 配置文件:/etc/security/limits.conf 通常使用这个
该文件可用于控制 用户最多同时打开的进程数目 与 单个用户进程能打开的最大文件数
# 配置文件介绍
<domain> <type> <item> <value>
# 详解
<domain> : 表示要限制的用户
<type> : 表示设定类型 # soft :软限制 hard :硬限制
<item> : 表示可选的资源 # nofile :最大文件打开数 nproc :最大进程数
<value> : 表示要限制的值
# 加大文件描述符 与 最大打开的进程数 参考值
cat >>/etc/security/limits.conf<<EOF
* soft nofile 102400
* hard nofile 102400
* soft nproc 102400
* hard nproc 102400
EOF
# 重启查看
ulimit -n # 查看最大打开的文件数目
102400
#### 2 配置文件:/etc/security/limits.d/20-nproc.conf
该文件只用于控制 用户最多同时打开的进程数目
优先级高于/etc/security/limits.conf,出现冲突后,以此为准
# 配置文件介绍
[root@egon ~]# cat /etc/security/limits.d/20-nproc.conf
egon1 soft nproc 3 # 用户egon1最多同时开3个进程
egon2 soft nproc 4 # 用户egon2最多同时开4个进程
* soft nproc 5 # 其他用户最多同时开5个进程
root soft nproc unlimited # root用户无限制
# 重启生效
6.2 内核最大进程总数
### 1 系统能开设的最大进程数
cat /proc/sys/kernel/pid_max
32768
# 0.进程PID最大值
32位系统 : 32768
64位系统 : 2^22 # 4194304 约400万
# 1.临时修改
echo 4194303 > /proc/sys/kernel/pid_max
sysctl -w kernel.pid_max=655351
# 2.永久配置
echo "kernel.pid_max= 4194303" | tee -a /etc/sysctl.conf
# tee -a 命令
读取输入数据,追加到文件中
会同时打印到屏幕和文件里
echo "kernel.pid_max= 4194303" >>/etc/sysctl.conf # 直接追加到文件中
sysctl -p
6.2.1 sysctl 命令
### sysctl 命令
用于运行时配置内核参数,这些参数位于/proc/sys目录下
用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能
# 格式
sysctl 选项 参数值
-a 显示所有的系统参数
-w 临时改变改变某个指定参数的值 eg: sysctl -w net.ipv4.ip_forward=1
-p 从指定的文件加载系统参数 # 若不指定,即从/etc/sysctl.conf中加载
6.3 调整swappiness
### 调整swappiness
主要是控制系统对 swap分区的使用
# 0 参数值设置
设置范围: 0~100 # 建议设置成10即可
# 值越低,就会让Linux系统尽量 多用物理内存,尽量少用swap分区
默认为60,则内存在使用到100-60=40% 时,就开始出现有交换分区的使用
# eg:
笔记本电脑有 16GB的内存和 8GB的交换空间,swappiness为60
则在使用大约 6GB (16G*40%=6.4G)的内存后,开始使用交换分区
# 1 查看swappiness值
cat /proc/sys/vm/swappiness # 默认值一般就是60
60
sysctl vm.swappiness
# 2 临时修改
echo 10 > /proc/sys/vm/swappiness
sysctl -w vm.swappiness=10
# 3 永久配置
echo "vm.swappiness = 10" | tee -a /etc/sysctl.conf
sysctl -p
6.4 其他内核优化
# 都在 /proc/sys/net/ipv4/ 目录下面的参数值
# 修改内核配置文件 /etc/sysctl.conf
[root@egon ~]# 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
# 加载生效
[root@egon ~]# sysctl -p
# 注:
syncookies开启后,用来防止syn洪水攻击
详见:https://www.cnblogs.com/linhaifeng/articles/13959796.html
分类:
Linux运维
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?