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
posted @   Edmond辉仔  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示