目录
1 简介
2 常用参数
2.1 /proc 文件系统与 sysctl
2.2 配置文件
2.3 常用内核参数
2.3.1 kernel:/proc/sys/kernel/
2.3.2 虚拟内存:/proc/sys/vm/
2.3.3 文件系统:/proc/sys/fs/
2.3.4 网络:/proc/sys/net/ipv4/
2.4 资源控制参数
3 方案举例
3.1 Oracle 内核参数调优
3.2 Weblogic 网络调优
4 常见故障处理
4.1 资源不可用
4.1.1 问题现象
4.1.2 原因分析
4.1.3 解决方法
4.2 VFS: file-max limit xxxxxx reached
4.2.1 问题现象
4.2.2 原因分析
4.2.3 解决方法
4.3 Too many open files
4.3.1 问题现
4.3.2 原因分析
4.3.3 解决方法
简介
本文介绍常用的系统优化方法以及与系统资源相关的问题处理。
常用参数
/proc 文件系统与 sysctl
1 /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux 内核空间和用户空间之间进行通信;sysctl 是一个实时调整内核参数的工具,它依赖于 /proc,通过操作 /proc/sys/ 目录内的内容达到动态调整内核参数的目的。
2 sysctl 命令参数中的参数名称与 /proc/sys/ 下的目录结构相对应,例如:
sysctl 的 net.ipv4.conf.all.send_redirects 对应 /proc/sys/net/ipv4/conf/all/send_redirects
相应的调整方法也是对应的,例如:
sysctl -w net.ipv4.conf.all.send_redirects=0 等效 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
配置文件
§ /etc/sysctl.conf,这是 sysctl 预加载的配置文件,语法如下:
#注释
;注释
参数 = 值
§ /etc/security/limits.conf,这是 pam_limits 模块的配置文件,通过 pam_limits 模块可以控制用户的系统资源分配,语法如下:
#用户或者组 软硬限制 资源的类型 限制资源的大小
<域> <类型> <资源> <值>
常用内核参数
kernel:/proc/sys/kernel/
参数 |
说明 |
pid_max |
最大的进程ID 号数值,如果达到此值,下个进程的ID 将从最小值开始 |
panic |
当kernel panic发生时,等待重启的时间,单位为秒,如果使用software watchdog,建议值为60 |
shmall |
全部允许使用的共享内存大小,单位为 bytes |
shmmax |
单个段允许使用的大小,单位为 bytes |
shmmni |
系统的内存segment的总数 |
sysrq |
内核中断值,0 为禁用,1为完全启用,大于1 为部分启用 |
pty/max |
最大伪终端数值 |
pty/nr |
目前已分配的伪终端值 |
虚拟内存:/proc/sys/vm/
参数 |
说明 |
nr_hugepages |
系统大内存页最大限制数,关于大内存页 |
文件系统:/proc/sys/fs/
参数 |
说明 |
aio-max-nr |
最大异步IO限制 |
aio-nr |
当前已调用异步IO值 |
file-max |
最大文件描句柄数限制 |
file-nr |
第一个数值表示内核已分配的文件句柄数,第二个数表示文件句柄已经分配但是目前没被使用,第三个数值即file-max |
网络:/proc/sys/net/ipv4/
参数 |
说明 |
icmp_echo_ignore_all |
屏蔽所有 icmp 消息,0 表示关闭, 1 表示打开 |
ip_forward |
ip 转发,0 表示关闭,1 表示打开 |
tcp_keepalive_time |
tcp 保持连接的时间,单位为秒,默认值是 7200 |
tcp_keepalive_probes |
探测tcp 连接是否存活的尝试次数,默认值为 9 |
tcp_keepalive_intvl |
每次探测tcp 连接是否存活的间隔时间,单位为秒,默认值为 75 |
tcp_max_syn_backlog |
未获得客户端确认的tcp 连接请求,需要保存在队列中最大数目 |
资源控制参数
资源类型 |
说明 |
core |
生成的 core 文件的大小限制,单位为 KB |
data |
最大的 data 的大小,单位为 KB |
fsize |
最大的文件大小,单位为 KB |
memlock |
最大的锁定内存地址空间,单位为KB |
nofile |
最大文件打开数 |
rss |
max resident set size (KB) |
stack |
最大堆栈大小,单位为 KB |
cpu |
最大CPU 时间,单位为分钟 |
nproc |
最大进程数 |
as |
地址空间限制 |
maxlogins |
此用户的登录次数限制 |
maxsyslogins |
此系统的登录次数限制 |
priority |
用户进程的优先级别 |
locks |
此用户的最大文件锁 |
sigpending |
最大等待信号量数 |
msgqueue |
POSIX 消息队列所能使用的最大内存,单位为 bytes |
nice |
最大的nice 值限制 |
rtprio |
最大实时优先级别 |
方案举例
Oracle 内核参数调优
Weblogic 网络调优
常见故障处理
资源不可用
问题现象
用户执行su - root 时,提示”can not set user id:资源不可用“
原因分析
这个错误是因为普通用户不能再创建系统进程,即 fork() 调用失败。
解决方法
1、可以通过执行如下两条命令,来查看僵尸进程:
# ps auxwwf |grep -i defunct
2、而如果发现有僵尸进程,需要考虑以下几点:
2.1 条件允许的话,建议您直接重启机器;
2.2 建议您检查应用情况,查看产生僵尸进程的原因,才能从根本上解决问题;
2.3 最后,按照“步骤三”方法适当将limits.conf文件中的oracle两个软限制调大一些。
3、如果没有发现僵尸进程,调整该普通用户的系统资源限制:
3.1 打开 /etc/security/limits.conf,修改里面如下内容:
user hard nproc 16384
user soft nproc 8191
其中的 user soft nproc 2047,nproc 是单个用户可用的最大进程数。系统默认的软限制是8091,您把这一项调大一些,最大为不超过hard 行的值
3.2 重新登录此用户,执行 ulimit -u 验证。
VFS: file-max limit xxxxxx reached
问题现象
在系统日志中,可以看到类似下面的信息:
kernel: VFS: file-max limit xxxxxx reached
原因分析
系统中打开的文件数已经达到内核 fs.fs-max 的限制;
解决方法
1、打开 /etc/sysctl.conf,添加或修改 fs-max 值:
fs.file-max = 65535
2、修改完毕后,执行 sysctl -p 生效,执行如下命令验证:
# cat /proc/sys/fs/file-max
Too many open files
问题现象
执行任何命令终端都报出:Too many open files 的错误;
原因分析
文件打开数已经达到此用户的最大限制;
解决方法
1、打开 /etc/security/limits.conf,添加或者修改如下内容:
user soft nofile 1024
user hard nofile 65536
修改 user soft nofile 1024 里面的1024,此值不应超过 hard nofile 里的值
2、重新登录,执行 ulimit -n 验证。