Nginx.conf配置优化:
1、user nginx nginx; 定义用户和组
2、worker_processes 4; nginx进程数,建议按照cpu数目来指定,一般为它的倍数。
3、worker_cpu_affinity 0001 0010 0100 1000; 为每个进程分配cpu
4、worker_rlimit_nofile 102400; 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打
开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
5、use epoll; 使用epoll的I/O模型。epoll是Linux内核为处理大批量文件描述符而作了改进的poll,
它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
6、worker_connections 102400; 每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。
7、keepalive_timeout 60; 超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后继请求时,keepalive-timeout功能可避免建立或重新建立连接。
8、client_header_buffer_size 4k; 客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于
一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
9、open_file_cache max=102400 inactive=20s; 这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过
多长时间文件没被请求后删除缓存。
10、open_file_cache_valid 30s; 这个是指多长时间检查一次缓存的有效信息。
11、open_file_cache_min_uses 1; open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,
如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
Tomcat内存优化:
linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入
JAVA_OPTS=”-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai”
XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4
XX:MaxPermSize最大非堆内存
-Xms:初始值
-Xmx:最大值
-Xmn:最小值
Tomcat 线程优化(server.xml文件)
<Connector port=”80″ protocol=”HTTP/1.1″ maxThreads=”600″ minSpareThreads=”100″ maxSpareThreads=”500″ acceptCount=”700″
connectionTimeout=”20000″ redirectPort=”8443″ />
maxThreads=”600″ ///最大线程数
minSpareThreads=”100″///初始化时创建的线程数
maxSpareThreads=”500″///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount=”700″//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
http connector的优化,如果使用apache和tomcat做集群的负载均衡,并且使用ajp协议做apache和tomcat的协议转发,那么还需要优化ajp connector。
<Connector port=”8009″ protocol=”AJP/1.3″ maxThreads=”600″ minSpareThreads=”100″ maxSpareThreads=”500″ acceptCount=”700″
connectionTimeout=”20000″ redirectPort=”8443″ />
由于tomcat有多个connector,所以tomcat线程的配置,又支持多个connector共享一个线程池。
首先,打开/conf/server.xml,增加
<Executor name=”tomcatThreadPool” namePrefix=”catalina-exec-” maxThreads=”500″ minSpareThreads=”20″ maxIdleTime=”60000″ />
最大线程500(一般服务器足以),最小空闲线程数20,线程最大空闲时间60秒。
然后,修改<Connector …>节点,增加executor属性,executor设置为线程池的名字:
<Connector executor=”tomcatThreadPool” port=”80″ protocol=”HTTP/1.1″ connectionTimeout=”60000″ keepAliveTimeout=”15000″ maxKeepAliveRequests=”1″ redirectPort=”443″ />
可以多个connector公用1个线程池,所以ajp connector也同样可以设置使用tomcatThreadPool线程池。
Tomcat设置session过期时间
conf\web.xml中通过参数指定:
<session-config>
<session-timeout>180</session-timeout>
</session-config>
单位为分钟。
Tomcat禁用DNS查询
当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名 转换为IP地址。
DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。
修改server.xml文件中的Connector元素,修改属性enableLookups参数值: enableLookups=”false”
如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址