ulimit

ulimit 限制

    linux操作系统对文件系统有着一些限制,本文就我遇到一个问题来简单描述一下我对ulimit的一点简单的认识,不一定正确,基本是我对这一块的理解。
 
    先说一下我遇到问题。我拥有的一台下载服务器,Centos5.2_x86-64的系统。
    测试:1  apache服务,prefork模式,5000的并发的小文件 正常服务
                 2  更换为lighttpd, 5000并发  大量连接无法建立
                    /var/log/message : Socket/File: Can’t open so many files
 
    就以上的例子说一下,在针对小静态文件的处理上,网上的很多数据显示lighttpd这种轻量级的web-server处理能力要优于apache,为什么在实验上lighttpd反而不如apache呢。
    出现"Socket/File: Can’t open so many files”这个错误的信息的原因是进程打开文件句柄数超出限制。看一下Centos5.2系统的限制是什么:
ulimit -a:
    
open files                                            (-n) 1024
 
以上信息表明操作系统允许一个进程打开的文件句柄数,包含socket连接,传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字,不存在相应的目录清单,但是在后台为该应用程序分配了一个 文件句柄,无论这个文件的本质如何,该文件句柄为应用程序与基础操作系统之间的交互提供了通用接口。
 
    再回头看一下apache和lighttpd在处理5000的并发时产生的问题,首先apache的prefork模式是对每一个socket连接分配一个进程来进行处理,而lighttp采用单 进程多路复用的方式响应请求,所有的socket都有一个进程来打开,在文件句柄1024的限制下显然是有大量连接无法进入了。当我们调大文件句柄限制后,lighttpd便正常的工作了。至于如何修改这个以下连接讲的比较清楚可以进行参考:
[url]http://www.php-oa.com/2008/04/21/ulimit-linux.html[/url]
echo -ne "
* soft nofile 65536
* hard nofile 65536
" >>/etc/security/limits.conf
 
    lsof命令可以跟踪系统打开的文件句柄总数,使用方法见以下连接
[url]http://www.ibm.com/developerworks/cn/aix/library/au-lsof.html[/url]

你可能感兴趣的:(职场,ulimit,休闲)