系统资源调优与内核参数配置| 学习笔记

简介: 快速学习系统资源调优与内核参数配置。

开发者学堂课程【线上Linux服务器优化经验系统资源调优与内核参数配置】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/382/detail/4801


系统资源调优与内核参数配置

 

内容简介

.系统资源调优

1.关注ulimit命令

2.系统内核参数调优

ip_conntrack_max 参数

swappiness 参数

 

一.系统资源调优

1.关注 ulimit 命令 可以设置系统资源

ulimit-n (最大打开文件数)

我们输入 ulimit -a,

image.png

它会把系统里面所有的资源信息都给列出来,这里面有

Core file size             (blocks,-c)  0

表示是否打开 Core 文件调试,这个主要针对我们程序 C 或者 C++,如果调试问题,我们可以通过这个打开,通过 Core 文件调试他们的异常。

另外是关于数字文件,数字样式的大小,默认情况下我们都不做设置,保持文件大小。其中我们重点关注。

open files     (-n)  65535打开的最大文件数,通过这个命令我们也可以看到,打开最大文件数的方法就是 -n,它的配置就是系统中的配置打开最大文件数,这个文件不是严格意义上的文件,在 ulimit 里面它的专业名词叫做文件句柄。

其实也就是说,一个进程可能会加载很多文件句柄。因此我们在查文件数也就是在ulimit 里面查文件句柄的大小。

还有一个我们需要经常关注的就是最大用户数,这也是要重点关注的

max user processes      (-u)  7811

其他的一般出现问题的几率很低。

那么与 ulimit-n 相关的一个问题

常见案例日志:

java.net.SocketException: Too many open files 这个报错是 java 用的一个报错,为什么在 java 应用里面会有这么多报错,就是因为 java 这个里面占用资源的方法和其他应用是不一样的。

一个 java 进程他其实是有多线程去运行的,那么每个线程会加载很多文件句柄,然后一个进程有很多个线程,一个线程又加载很多个文件,这样就会有很多很多文件句柄,因此 java 的应用我们会重点关注系统资源这个打开最大文件数文件数,这个问题是经常会发生的。出现这个问题是因为我们打开的系统文件数超出了限制。

那怎么样解决这个问题或者怎么样避免这个问题,其实也就是有几个配置文件需要修改。

相关配置文件:

/etc/security/limits.conf  主配置文件(centos5.xcentos6.x版本有)

/etc/security/limits.d/90-nproc.conf(centos6.x版本后新增的文件)

*(用户名)      soft(软限制) nofile    65536 (打开最大文件数的大小)

*(用户名)      hard(硬限制)  nofile     65536

ulimit   -u(最大用户数)和系统相关

*(用户名)       soft   nproc  65536

root    soft   nproc   unlimited

如何修改打开的最大文件数?

通过

*      soft  nofile    65536

*      hard  nofile     65536 这两个参数加到/etc/security/limits.conf之后就可以了。

配置完成之后不会马上生效,一般是要退出去重新进来在生效

image.png

这是以生效的结果。

2.系统内核参数调优  

内核参数调优要综合各方面的知识去权衡,然后再根据我们的业务特点或环境综合做调试,没有固定不变的一个参数。

常见案例日志:

kernel: ip_conntrack: table full, dropping packet这个报错的原因就是由于系统参数有问题导致的。

那么具体和谁相关?

这个报错关注点就是 ip_conntrack_max 参数,这个参数其实是内核参数。

这个参数在 centos5.xcentos6.x每个版本都是不一样的。

ip_conntrack_max 参数

/proc/sys/net/ipv4/netfilter/ip_conntrack_max (路径)     或者

/proc/sys/net/ipv4/ip_conntrack_max(centos5.x)

/proc/sys/net/netfilter/nf_conntrack_max(centos6.x)

因为在 ip_conntrack 里面他其实是维护了一个访问,连接的一个链表,他一个链表他其实是有一个限制值的,比如一个进来是会有一个连接的链表,第二个进来的时候它会显示第二个,以此类推,他有很多个。

那么当这个连接的链表满了之后就会发生 table full 这个问题。知道了这个原理,解释这个问题就方便多了。

为了杜绝我们线上的服务器会发生类似问题,我们在服务器部署刚开始就把这个值调的大一点,是没有任何坏处的。

第一我们调大不会增加服务器的负载,所以我们把这个值调大就会避免很多问题。

它的参数值就是 net.ipv4.netfilter.ip_conntrack_max

调参数在 /etc/sysctl.conf 加入

net.ipv4.netfilter.ip_conntrack_max= 655360(centos5.x)

net.nf_conntrack_max=100000(centos6.x)

swappiness 参数

表示使用 swap 的概率,此值越大,表示使用 swap 的概率越大。

推荐配置如下:

查看目前配置:cat/proc/sys/vm/swappiness

添加如下内容到/etc/sysctl.conf

vm.swappiness=10(这个值越小,使用率越低)

表示当内存使用率超过 (100-10)90% 时,才开始使用 swap。

我们线上 web 服务器配置参考(每天3亿的量)

如下配置:

net ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_tw recycle=1

net.ipv4.tcp_fin_timeout =10

net.ipv4.tcp_max_syn_backlog=20000

net.core.netdev_max_backlog= 32768

net.core.somaxconn=32768

net.core.wmem_default =8388608

net.core.rmem_default = 8388608

net.core.rmem_max=16777216

net.core.wmem_max=16777216

net ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries =2

net ipv4.tcp_mem = 94500b00 915000000 927000000

net.ipv4.tcp_max_orphans=3276800

net.ipv4.ip_local_port_range = 1024  65535

net.ipv4.tcp_max_tw_buckets = 500000

net ipv4.tcp_keepalive_time=60

net.ipv4.tcp_keepalive_intvl= 15

net.ipv4.tcp_keepalive_probes = 5

net.nf_conntrack_max=2097152

相关文章
|
Web App开发 Windows
【Windows】 chrome 如何下载网站在线预览PDF文件,保存到本地
【Windows】 chrome 如何下载网站在线预览PDF文件,保存到本地
1699 0
|
移动开发 前端开发
基于Jeecg-boot的flowable流程支持拒绝同意流程操作
基于Jeecg-boot的flowable流程支持拒绝同意流程操作
451 0
|
前端开发 开发者 UED
移动优先:响应式设计在现代Web开发中的实践策略
【10月更文挑战第29天】在现代Web开发中,响应式设计已成为不可或缺的实践策略,使网站能适应各种设备和屏幕尺寸。本文介绍了移动优先的设计理念,对比了移动优先与桌面优先的策略,探讨了流式布局与固定布局的区别,详细讲解了CSS媒体查询的使用方法,并强调了触摸和手势支持及性能优化的重要性。
264 1
|
Java API Apache
java集合的组内平均值怎么计算
通过本文的介绍,我们了解了在Java中计算集合的组内平均值的几种方法。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。无论是使用传统的循环方法,还是利用Java 8的Stream API,亦或是使用第三方库(如Apache Commons Collections和Guava),都可以有效地计算集合的组内平均值。希望本文对您理解和实现Java中的集合平均值计算有所帮助。
312 0
|
存储 Linux 索引
在Linux中,软连接和硬链接的区别?
在Linux中,软连接和硬链接的区别?
|
弹性计算 Kubernetes 安全
容器化管理ACK
ACK一种管理容器平台的管理架构
391 2
|
Unix 应用服务中间件 nginx
安装nginx:src/os/unix/ngx_user.c:26:7: error: ‘struct crypt_data’ has no member named ‘curren
安装nginx:src/os/unix/ngx_user.c:26:7: error: ‘struct crypt_data’ has no member named ‘curren
1278 1
安装nginx:src/os/unix/ngx_user.c:26:7: error: ‘struct crypt_data’ has no member named ‘curren
成功解决{‘error_code‘: 18, ‘error_msg‘: ‘Open api qps request limit reached‘}
成功解决{‘error_code‘: 18, ‘error_msg‘: ‘Open api qps request limit reached‘}
成功解决{‘error_code‘: 18, ‘error_msg‘: ‘Open api qps request limit reached‘}
|
网络协议 数据安全/隐私保护
【OpenFiler】使用虚拟机安装openfiler
【OpenFiler】使用虚拟机安装openfiler
691 0
【OpenFiler】使用虚拟机安装openfiler
|
关系型数据库 MySQL 数据库
数据库降本秘籍:阿里云RDS经济版(RDS倚天版)最高可省48%
RDS倚天版结合软硬件协同技术的优化,持续释放技术红利。 云数据库 RDS MySQL、RDS PostgreSQL 倚天ARM版通用规格最高降价40%