标签 线程 下的文章

Apache中 Win32DisableAcceptEx 与MaxRequestsPerChild及参数设置

win系统下apache环境,mpm_winnt.c模式,优化参数:
ThreadsPerChild 说明:每个子进程建立的线程数,默认值:64,最大值:1920。网上查询资料建议设置在100-500之间。如服务器性能高,可设置更大值。
MaxRequestsPerChild 说明:每个子进程在其生存期内允许伺服的最大请求数量,也就是最大线程。如果超过限制,子进程会结束。默认值:0。
推荐MaxRequestsPerChild不要设置为0,设置为非0,可以保护Apache进程免遭内存泄漏的影响,因为你不知道运行在Apache上的应用程式在什么时候会出错导致内存泄漏。

线程设置也不是越大越好,太大会导致产生新的子进程后长期空闲,并非最佳优化。要根据服务器的硬件配置、系统环境、访问流量等调试设置。
如果值太小,也会造成apache频繁重启性能降低,在日志中会出现这样的提示:

Process exiting because it reached MaxRequestsPerChild. Signaling the parent

Win32DisableAcceptEx
使用accept()代替AcceptEx()接受网络链接。AcceptEx()是一个微软的WinSock2 API ,通过使用BSD风格的accept() API提供了性能改善。一些流行的Windows产品,比如防病毒软件或虚拟专用网络软件,会干扰AcceptEx()的正确操作。
如果apache的error.log里面有类似报错,

[warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

可以直接禁用AcceptEx,重启 Apache

<IfModule mpm_winnt.c>
  Win32DisableAcceptEx
  ......
</IfModule>

Linux下有效修改最大文件句柄数 max open files及ulimit原理

limits.conf 工作原理
limits.conf 是 pam_limits.so 的配置文件,然后 /etc/pam.d/ 下的应用程序调用 pam_*.so 模块。譬如说,当用户访问服务器,服务程序将请求发送到 PAM 模块,PAM 模块根据服务名称在 /etc/pam.d 目录下选择一个对应的服务文件,然后根据服务文件的内容选择具体的 PAM 模块进行处理。

limits.conf 文件格式

username|@groupname   type  resource  limit 
1)username|@groupname
设置需要被限制的用户名,组名前面加 @和用户名区别。也可用通配符 * 来做所有用户的限制

2)type
类型有 soft,hard 和 -,其中 soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比 hard 限制高。用 - 就表明同时设置了 soft 和 hard 的值

3)resource: 表示要限制的资源

nofile - 打开文件的最大数目
noproc - 进程的最大数目

ulimit 命令用来限制系统用户对 shell 资源的访问,常用参数解释如下

ulimit(选项)

-a:显示目前资源限制的设定;
-c <core 文件上限 & gt;:设定 core 文件的最大值,单位为区块;
-d < 数据节区大小 & gt;:程序数据节区的最大值,单位为 KB;
-f < 文件大小 & gt;:shell 所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m < 内存大小 & gt;:指定可使用内存的上限,单位为 KB;
-n < 文件数目 & gt;:指定同一时间最多可开启的文件数;
-p < 缓冲区大小 & gt;:指定管道缓冲区的大小,单位 512 字节;
-s < 堆叠大小 & gt;:指定堆叠的上限,单位为 KB;
-S:设定资源的弹性限制;
-t <CPU 时间 & gt;:指定 CPU 使用时间的上限,单位为秒;
-u < 程序数目 & gt;:用户最多可开启的程序数目;
-v < 虚拟内存大小 & gt;:指定可使用的虚拟内存上限,单位为 KB。

使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。
新装的linux默认只有1024,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。
使用 ulimit -n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535,-S指soft,-H指hard)
有如下三种修改方式:
1.在/etc/rc.local 中增加一行 ulimit -SHn 65535
2.在/etc/profile 中增加一行 ulimit -SHn 65535
3.在/etc/security/limits.conf最后增加如下两行记

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
---------------------------------------------
cat <<EOF>> /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
EOF

CentOS6修改线程参数:

sed -i "s/1024/65535/g" /etc/security/limits.d/90-nproc.conf

CentOS7修改线程参数:

sed -i "s/4096/65535/g" /etc/security/limits.d/20-nproc.conf 

具体使用哪种,试试哪种有效吧,CentOS中使用第1种方式无效果,使用第3种方式有效果,而在Debian中使用第2种有效果.
open file(s) kernel 级别有2个配置,分别是:

fs.nr_open,进程级别
fs.file-max,系统级别
fs.nr_open 默认设置的上限是 1048576,所以用户的 open file(s) 不可能超过这个上限。

VIA:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/tuning_and_optimizing_red_hat_enterprise_linux_for_oracle_9i_and_10g_databases/chap-oracle_9i_and_10g_tuning_guide-setting_file_handles

最新

分类

归档

评论

其它