前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux内核参数调优

Linux内核参数调优

作者头像
希里安
发布2023-10-30 19:08:30
4790
发布2023-10-30 19:08:30
举报
文章被收录于专栏:希里安希里安

剩下的时间就开始学习开源项目,完善自己的项目。

接下来cillianplatform项目的更新频率保持一周一次,等稳定了到公开测试版本,会告知大家。

至于文章分享,本月的时间就是围绕项目四个模块来分享,传统模块,包括linux、网络、监控、日志等,云原生模块,围绕docker、k8s等,自动化模块、智能化平台模块等,然后就是项目更新的一些内容,和大家共同学习进步!

今天就从linux开始,先分享一个linux命令搜查学习的web版本,这个仓库里面命令能学个七七八八,你的linux肯定没问题。

仓库地址:

代码语言:javascript
复制
https://github.com/jaywcjlove/linux-command

本地docker部署:

下载镜像:

代码语言:javascript
复制
docker pull wcjiang/linux-command
# Or
docker pull ghcr.io/jaywcjlove/linux-command:latest

部署容器:

代码语言:javascript
复制
docker run --name linux-command --rm -d -p 9665:3000 wcjiang/linux-command:latest
# Or
docker run --name linux-command -itd -p 9665:3000 wcjiang/linux-command:latest
# Or
 docker run --name linux-command -itd -p 9665:3000 ghcr.io/jaywcjlove/linux-command:latest

在浏览器中访问以下 URL:

代码语言:javascript
复制
http://localhost:9665/

可以看到部署非常方便,老手复习,新手学习都是非常好的,也可以部署到自己的网站,详情可以查看官方仓库,大家可以尝试一下!

再来看看linux内核常用的参数优化:

Linux内核参数优化可以根据不同的应用场景进行调整,以提高系统性能和稳定性。以下是一些常见的Linux内核参数优化:

  1. 文件系统缓存参数:文件系统缓存是Linux系统中的重要性能因素之一,可以通过调整以下参数进行优化:
    • vm.dirty_background_ratio:设置脏页(未写回磁盘的页)的百分比,建议设置为10-20%。
    • vm.dirty_ratio:设置系统在写入新的数据之前可以容忍的脏页数量的百分比,建议设置为30-40%。
    • vm.dirty_expire_centisecs:设置脏页的过期时间,建议设置为3000-5000毫秒。
  2. 网络参数:网络性能是Linux系统中的另一个关键因素,可以通过以下参数进行优化:
    • net.core.somaxconn:设置TCP半连接队列的最大长度,建议设置为1024或更高。
    • net.core.netdev_max_backlog:设置网络接口队列的最大长度,建议设置为1000或更高。
    • net.ipv4.tcp_syncookies:开启SYN Cookies防止SYN Flood攻击。
    • net.ipv4.tcp_max_syn_backlog:设置SYN队列的最大长度,建议设置为1024或更高。
  3. 内存管理参数:内存管理是Linux系统的核心,可以通过以下参数进行优化:
    • vm.swappiness:设置内存交换的程度,建议设置为10-15。
    • vm.vfs_cache_pressure:控制内核如何释放缓存,建议设置为100或更高。
    • vm.overcommit_memory:控制内存过度分配的策略,建议设置为0或1。
  4. 进程管理参数:进程管理是Linux系统的另一个重要方面,可以通过以下参数进行优化:
    • kernel.pid_max:设置系统中最大进程ID号,建议设置为65536或更高。
    • kernel.threads-max:设置系统中最大线程数,建议设置为65536或更高。
    • kernel.sched_migration_cost_ns:设置进程迁移的代价,建议设置为500000或更高。

这里附上一个调优的脚本,我来简单翻译一下:

地址:

代码语言:javascript
复制
https://github.com/nyist-mirror/kernel_tuning
代码语言:javascript
复制
# !/bin/sh
#
####微调网络参数以获得更好的性能
当高传入连接请求率导致连接失败时,更改以下参数
Echo "100000" > /proc/sys/net/core/netdev_max_backlog
#接收新TCP连接的监听队列大小(默认:128)
Echo "4096" > /proc/sys/net/core/somaxconn
TIME-WAIT中同时持有的最大套接字数(默认:180000)
Echo "600000" > /proc/sys/net/ipv4/tcp_max_tw_buckets
#设置所有协议的最大Socket接收缓冲区(以字节为单位)
Echo "16777216" > /proc/sys/net/core/rmem_max
Echo "16777216" > /proc/sys/net/core/rmem_default
#设置所有协议的最大Socket发送缓冲区(以字节为单位)
Echo "16777216" > /proc/sys/net/core/wmem_max
Echo "16777216" > /proc/sys/net/core/wmem_default
设置Linux自动调优TCP缓冲区限制
Echo "4096 87380 16777216" > /proc/sys/net/ipv4/tcp_rmem
Echo "4096 87380 16777216" > /proc/sys/net/ipv4/tcp_wmem

Echo "0" > /proc/sys/net/ipv4/tcp_sack
Echo "0" > /proc/sys/net/ipv4/tcp_dsack
缺省情况下,TCP在连接关闭时将各种连接指标保存在路由缓存中,以便在不久的将来建立的连接可以使用这些指标来设置初始条件。通常,这会提高整体性能,但有时可能会导致性能下降。如果设置,TCP将不会缓存关闭连接时的度量。
Echo "1" > /proc/sys/net/ipv4/tcp_no_metrics_save
在终止TCP连接之前需要重试多少次
Echo "5" > /proc/sys/net/ipv4/tcp_retries2
如果连接当前未使用,发送TCP keepalive数据包以保持连接存活的频率。此值仅在启用keepalive时使用
Echo "120" > /proc/sys/net/ipv4/tcp_keepalive_time
每个keepalive探针等待应答的时间。换句话说,当您尝试计算连接死亡(keepalive死亡)之前需要多长时间时,此值非常重要。
Echo "30" > /proc/sys/net/ipv4/tcp_keepalive_intvl
确定超时前的探测数
Echo "3" > /proc/sys/net/ipv4/tcp_keepalive_probes
#如果你是关闭socket的一方,socket保持FIN-WAIT-2状态需要多长时间(默认:60)
Echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
#有时,网络中的数据包重排序可以解释为数据包丢失,因此增加该参数的值应该提高性能(默认值为“3″”)
Echo "15" > /proc/sys/net/ipv4/tcp_reordering
#
Echo "cubic" > /proc/sys/net/ipv4/ tcp_conestion_control
#该值取决于系统的总内存。在不同的情况下明智地使用它
# echo "262144" > /proc/sys/net/ipv4/tcp_max_orphans

#禁用核心转储
Echo "0" > /proc/sys/fs/ suid_dumable
#启用ExecShield
Echo "1" > /proc/sys/kernel/exec-shield
Echo "1" > /proc/sys/kernel/randomize_va_space
####网络参数,提高安全性
#禁用包转发(如果这台机器不是路由器)
Echo "0" > /proc/sys/net/ipv4/ip_forward
Echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects
Echo "0" > /proc/sys/net/ipv4/conf/default/send_redirects
#启用tcp_syncookies在面对SYN flood攻击时接受合法连接
Echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# Turn off禁用IPv4协议特性,这些特性被认为很少有合法用途,而且很容易被滥用
Echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
Echo "0" > /proc/sys/net/ipv4/conf/default/accept_source_route
Echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
Echo "0" > /proc/sys/net/ipv4/conf/default/accept_redirects
Echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects
Echo "0" > /proc/sys/net/ipv4/conf/default/secure_redirects
#记录可疑数据包(如果系统有过多的日志记录,应该关闭此功能)
Echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
#防范ICMP攻击
Echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#启用rfc推荐的源验证(不应该在非常复杂网络的路由器上使用)
Echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
Echo "1" > /proc/sys/net/ipv4/conf/default/rp_filter
增加IPv4端口范围以接受更多连接
Echo "5000 65535" > /proc/sys/net/ipv4/ip_local_port_range

#禁用IPV6
Echo "1" > /proc/sys/net/ipv6/conf/all/disable_ipv6
Echo "1" > /proc/sys/net/ipv6/conf/default/disable_ipv6
#
####文件系统调优
增加系统文件描述符限制
Echo "7930900" > /proc/sys/fs/file-max
#允许更多pid
/proc/sys/kernel/pid_max
使用高达95%的RAM(5%空闲)
Echo "5" > /proc/sys/vm/swappiness
#
Echo "20" > /proc/sys/vm/dirty_background_ratio
#
Echo "25" > /proc/sys/vm/dirty_ratio


Echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter

参考文献:

  1. http://docs.oracle.com/cd/E19644-01/817-5051/pt_tuningos.html#wp62221
  2. http://www.netadmintools.com/art295.html
  3. https://cs.uwaterloo.ca/~brecht/servers/openfiles.html
  4. http://www.nateware.com/linux-network-tuning-for-2013.html
  5. http://www.lognormal.com/blog/2012/09/27/linux-tcpip-tuning/
  6. http://aiscaler.com/wiki/linux-tuning-for-high-performance
  7. http://www.cyberciti.biz/faq/linux-tcp-tuning/
  8. https://www.frozentux.net/ipsysctl-tutorial/ipsysctl-tutorial.html
  9. http://www.susegeek.com/networking/network-performance-fine-tuning-in-opensuse-suse/

今天的分享就到这了,祝学习顺利!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 希里安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档