linux 调优--修改文件最大句柄数

linux 调优--修改文件最大句柄数,第1张

最近重启平台后,启动数据流,确发生报错:

发现文件打开太多,句柄数不够用了,需要调优linux参数:

首先查看下系统的句柄是多少,用ulimit -a 命令查看

linux默认最大文件句柄数是1024个,当你的服务器在大并发达到极限时,就会报出“too many open files”。

修改linux系统参数:vi /etc/security/limits.conf

*softnofile65536

*hardnofile65536

修改以后保存,注销当前用户,重新登录,执行ulimit -a

修改linux的最大文件句柄数限制对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到too

many

files

open的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:1lsof

-n

|awk

'{print

$2}'|sort|uniq

-c

|sort

-nr|more修改linux的最大文件句柄数限制的方法:

1)ulimit

-n

65535

在当前session有效,用户退出或者系统重新后恢复默认值

2)修改profile文件:在profile文件中添加:ulimit

-n

65535

只对当个用户有效

3)修改文件:/etc/security/limits.conf,在文件中添加:(立即生效-当前session中运行ulimit

-a命令无法显示)[html]

*

soft

nofile

32768

#限制单个进程最大文件句柄数(到达此限制时系统报警)

*

hard

nofile

65536

#限制单个进程最大文件句柄数(到达此限制时系统报错)

4)修改文件:/etc/sysctl.conf。在文件中添加:[html]

fs.file-max=655350

#限制整个系统最大文件句柄数

运行命令:/sbin/sysctl

-p

使配置生效

百度百科:

在文件I/O中,要从一个文件读取数据,应用程序首先要调用 *** 作 系统函数 并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给 *** 作系统。当完成任务后,再通过调用系统函数来关闭该文件。

linux下文件句柄是有限制的,默认并不会太高,一般都是1024。linux指令ulimit -n可以查看文件句柄限制。

ulimit -a   用来显示当前的各种用户进程限制

ulimit -n 查看当前用户默认的最大文件句柄数

lsof |wc -l  查看所有进程的文件打开数

lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more 查看当前进程打开了多少句柄数,注意第一列是句柄数,第二列是进程id

硬限制是实际的限制,而软限制,是warnning限制,只会做出warning,可以通过ulimit来设定这两个参数,用root用户执行ulimit -HSn 4096(H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7342989.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存