大河向东流
2048字约7分钟
LinuxCentosVirtualBox生产环境
2024-11-17
作者:大河向东流
签名:愿头发如星辰,永不凋零于这片数据之海。
🐾 友情链接 🌵 CC BY-NC-ND 协议
一般来说,考量一个系统的性能时,通常主要关注以下两个核心指标:
① 系统吞吐量
系统吞吐量是衡量系统在单位时间内能够处理的任务数量或数据量。它反映了系统的处理能力和效率。高吞吐量意味着系统能够在短时间内处理更多的请求或数据,从而满足更高的业务需求。例如,在Web服务器中,吞吐量可以表示为每秒能够处理的HTTP请求数量。
② 系统响应时间
系统响应时间是衡量系统从接收到请求到完成处理并返回结果所需的时间。它反映了系统的响应速度和用户体验。较短的响应时间意味着系统能够更快地处理请求并返回结果,从而提高用户的满意度和系统的效率。例如,在数据库查询中,响应时间可以表示为从发送查询请求到接收到查询结果所需的时间。
注意:关闭swap可能会影响系统的性能,特别是在系统内存不足的情况下。因此,在决定关闭swap之前,需要确保系统有足够的物理内存来支持当前和未来的负载。建议应用或者中间件强依赖于内存,避免偶发的请求高峰时,内存不够用,从而占用交换分区导致部分响应时间变长或者超时,关闭swap分区以使响应更加稳定。
# 1.临时关闭,立即生效
swapoff -a
# 2.临时开启,立即生效
swapon -a
# 3.永久关闭,需要重启机器
vim /etc/fstab
注释掉含swap的行
Swap交换分区通常会在物理内存不足时被使用,这会导致额外的I/O操作和延迟。当服务器内存不够用时,swap分区可以占用一部分磁盘空间。 一般在生产环境中,申请机器时都会填写几项参数
申请生产的资源前要做好评估,已申请资源不足就提申请扩容。关闭服务器swap分区,具备提高性能、减少磁盘使用、减少系统管理的复杂性的好处。 free -h 命令执行后,swap那一行都是0,就是关闭了
nofile:单个进程的最大打开文件数
fs.nr_open:单个进程可分配的最大文件数
fs.file-max::系统内核一共可以打开的最大值
参数 | 查询语句 | 默认值 |
---|---|---|
nofile | ulimit -n | 1024 |
nr_open | cat /proc/sys/fs/nr_open sysctl fs.nr_open | 1048576 |
file-max | cat /proc/sys/fs/file-max sysctl fs.file-max | 368194 |
nofile 的值不允许超过 nr_open 和 file-max 的值,否则会造成ssh登录不了系统,务必小心!!!
vim /etc/security/limits.conf (尾部添加如下内容)
# 所有用户可打开的最大文件数的软限制
* soft nofile 65535
# 所有用户可打开的最大文件数的硬限制
* hard nofile 65535
# 所有用户可创建的最大进程数的软限制为无限制
* soft nproc unlimited
# 所有用户可创建的最大进程数的硬限制为无限制
* hard nproc unlimited
永久修改,需要重启服务器。
学习文章1 linux百万并发之 tcp_mem - 博客园
学习文章2 服务器性能调优_服务器调优 - CSDN博客
文章1中所做的实验数据比较准确,与平日生产经验基本一致,本文不再赘述前辈的经验,直接上参数。
假设当前服务器为32G,已关闭swap分区,且剔除系统和应用所需16G内存之外,预估可提供给tcp请求的最大内存为16G。一般来说,服务器内存正常运行时占60%较为健康,资源利用也比较合理。(如果你确实需要调整TCP参数以优化网络性能,建议先进行充分的测试、评估、压测,以确定最佳的配置方案)
# 编辑配置文件
vim /etc/sysctl.conf (尾部追加以下内容)
# 用于向外连接的端口范围,建议使用参数
net.ipv4.ip_local_port_range = 1024 65535
# 内核分配给TCP连接的内存大小的最小值、默认值和最大值,单位是1Page=4096B
# 3G 8G 16G
net.ipv4.tcp_mem = 786432 2097152 3145728
# TCP接收缓冲区的最小值、默认值和最大值,单位是字节B
# 4K 4K 16G
net.ipv4.tcp_rmem = 4096 4096 16777216
# TCP发送缓冲区的最小值、默认值和最大值,单位是字节B
# 4K 4K 16G
net.ipv4.tcp_wmem = 4096 4096 16777216
# 单个网络套接字能够使用的最大接收缓冲区大小
# 16G
net.core.rmem_max = 16777216
# 单个网络套接字能够使用的最大发送缓冲区大小
# 16G
net.core.wmem_max = 16777216
执行 sysctl -p
立即生效。
学习文章3 Linux网络服务参数配置说明及实战 - CSDN博客
学习文章4 服务器TCP配置_- CSDN博客
# 编辑配置文件
vim /etc/sysctl.conf (尾部追加以下内容)
# TCP监听队列的长度,即处于SYN_RECV状态的连接的最大数量
net.core.somaxconn = 8192
# 服务器端用于记录那些尚未收到客户端确认信息的连接请求的最大值,指定SYN队列的最大长度
net.ipv4.tcp_max_syn_backlog = 8192
# 设置为 0,以防止潜在的攻击者通过发送伪造的 ICMP 重定向消息来篡改主机的路由信息
net.ipv4.conf.all.accept_redirects = 0
# 在高带宽延迟网络中,启用 TCP 窗口缩放功能可以显著提高数据传输的吞吐量
net.ipv4.tcp_window_scaling = 1
# 高并发场景下,减少TIME-WAIT连接的数量,提高系统处理新连接的能力
net.ipv4.tcp_tw_reuse = 1
# 启用TCP时间戳选项,这有助于避免在高带宽网络中可能出现的序列号卷绕问题,提高网络性能
net.ipv4.tcp_timestamps = 1
# 减小FIN-WAIT-2 状态下的超时时间,可以更快地释放这些连接所占用的资源,从而优化系统的性能
net.ipv4.tcp_fin_timeout = 30
# KeepAlive空闲时长,默认7200秒(2小时),TCP连接在空闲多长时间后开始发送保活探测包,可以更快的检测到无效连接。视应用实际需求情况,设置对应的值,本文以60秒为例。在长连接的情况下,客户端应更频繁的发送探测包。
net.ipv4.tcp_keepalive_time = 60
# 内核在回收内存时,对匿名页和文件页的回收倾向,通常使用0-100的范围之间的整数值。本文不建议使用,设置为0,不使用swap交换空间。落实到不同场景下,还是要根据实际情况进行综合考量。
vm.swappiness = 0
# 当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击
net.ipv4.tcp_syncookies = 1
# 系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,对于Apache、Nginx等服务器来说可以将其调低一点,设置5000~30000
net.ipv4.tcp_max_tw_buckets = 5000
执行 sysctl -p
立即生效。
如果是第一次搭建环境,使用上述进行计算你所需要配置的具体参数,可行。如果已投产服务器,一定要申请一台同环境同配置的机器,压测达到预期后,再进行投产使用。