最大文件符
文件描述符是服务器程序的宝贵资源,几乎所有的系统调用都是和文件描述符打交道。系统分配给应用程序的文件描述符数量是有限制的,所以我们必须总是关闭那些已经不再使用的文件描述符,以释放它们占用的资源。比如作为守护进程运行的服务器程序就应该总是关闭标准输入、标准输出和标准错误这3个文件描述符。
Linux对应用程序能打开的最大文件描述符数量有两个层次的限制:用户级限制和系统级限制。用户级限制是指目标用户运行的所有进程总共能打开的文件描述符数﹔系统级的限制是指所有用户总共能打开的文件描述符数。
下面这个命令是最常用的查看用户级文件描述符数限制的方法:
ulimit -n//查看用户级文件描述符
ulimit -SHn max-flie-number//修改(暂时有效)
#在/etc/security/limits.conf加入
hard nofile max-flie-number//系统的硬限制
sortnofile max-flie-number
内核参数
几乎所有的内核模块,包括内核核心模块和驱动程序,都在/proc/sys文件系统下提供了某些配置文件以供用户调整模块的属性和行为。通常一个配置文件对应一个内核参数,文件名就是参数的名字,文件的内容是参数的值。我们可以通过命令sysctl -a查看所有这些内核参数将讨论其中和网络编程关系较为紧密的部分内核参数。
/proc/sys/fs:
/proc/sys/fs/file-max,系统级文件描述符数限制。直接修改这个参数和s上面讨论的修改方法有相同的效果(不过这是临时修改)。一般修改/proc/sys/fs/file-max后,应用程序需要把/proclsys/fs/inode-max 设置为新/proc/sys/fs/file-max值的3~4倍,否则可能导致i节点数不够用。
/proc/sys/fs/epoll/max_user_watches,一个用户能够往epoll 内核事件表中注册的事件的总量。它是指该用户打开的所有epoll实例总共能监听的事件数目,而不是单个epoll实例能监听的事件数目。往epoll内核事件表中注册一个事件,在32位系统上大概消耗90字节的内核空间,在64位系统上则消耗160字节的内核空间。所以,这个内核参数限制了epoll使用的内核内存总量。
/proc/sys/net:
/proc/sys/netlcore/somaxconn,指定listen 监听队列里,能够建立完整连接从而进入ESTABLISHED或者SYN_RCVD状态的socket 的最大数目。
proc/sys/net/ipv4/tcp_wmem,它包含3个值,分别指定一个socket 的TCP写缓冲区的最小值、默认值和最大值。
proc/sys/net/ipv4/tcp_rmem,它包含3个值,分别指定一个socket的TCP读缓冲区的最小值、默认值和最大值。在代码清单3-6中,我们正是通过修改这个参数来改变接收通告窗口大小的。
proc/sys/net/ipv4/tcp_syncookics,指定是否打开TCP同步标签(syncookie)。同步标签通过启动cookic来防止一个监听socket因不停地重复接收来自同一个地址的连接青求(同步报文段),而导致listen监听队列溢出(所谓的SYN风暴)。
除了通过直接修改文件的方式来修改这些系统参数外,我们也可以使用sysctl命令来修改它们。这两种修改方式都是临时的。永久的修改方法是在/etc/sysctl.conf文件中加入相应网络参数及其数值,并执行sysctl -p使之生效,就像修改系统最大允许打开的文件描述符数那样。
压力测试
压力测试程序有很多种实现方式,比如I/O复用方式,多线程、多进程并发编程方式,以及这些方式的结合使用。不过,单纯的IO复用方式的施压程度是最高的,因为线程和进程的调度本身也是要占用一定CPU时间的。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/129696.html