Nginx、Tomcat和Redis配置文件说明

redis.conf:
1. logfile 添加了日志文件配置路径
2. maxclients 客户端最大连接数,修改为10000
3. no-appendfsync-on-rewrite 在aof重写或者写入rdb文件的时候,是否不执行fsync操作 修改为yes,防止fsync操作阻塞
4. cluster-node-timeout 集群检测超时时间,修改为15000毫秒,防止集群容易中断
5. slowlog-max-len 慢查询日志条数,修改为512条,方便后续排查慢查询问题
6. hash-max-ziplist-entries hash类型存储使用ziplist结构的条数,默认为512,修改为128
hash-max-ziplist-value ziplist中允许条目value值最大字节数,默认为64,建议为1024
优化hash结构数据的存储策略

server.xml:
1. protocol="org.apache.coyote.http11.Http11NioProtocol" 修改指定请求的访问协议为nio非阻塞模式,tomcat7设置为org.apache.coyote.http11.Http11NioProtocol,tomcat8推荐设置为org.apache.coyote.http11.Http11Nio2Protocol
2.connectionTimeout="5000" 修改连接等待超时时间,Tomcat默认配置为20秒,修改配置为5秒,这样在Tomcat阻塞的时候尽快断开链接
3.maxThreads="500" 当前Connector内部线程池中活动线程的最大数目,默认为200,可以理解为Tomcat同时能处理的请求,修改为500
4.minSpareThreads="50" 备用线程的最小数量,即Connector内部线程池保持的最小线程数目,默认为20,在相对空闲的情况下保持最小线程数目,可以减少频繁创建销毁线程带来的开销
5.maxConnections="500" 当前Connector能够支持的最大链接数,默认和maxThreads保持一致,如果大于该值,即使服务器创建新的请求处理任务,该任务在线程池中也只能排队等待,如果小于该值,线程池会存在空闲线程,就会浪费系统资源,所以和maxThreads保持一致即可
6.acceptCount="200" 此参数用于控制Socket中排队链接的最大个数,当Connector处理的请求达到maxConnections后,将进入等待状态,acceptCount控制的就是等待链接的数量,因此Tomcat可以接受的请求总数为maxConnections+acceptCount
7.enableLookups="false" 该属性设置为true,在调用request.getRemoteHos()方法时将执行DNS查询以返回远程客户端的实际主机名称。设置为false,将跳过查询直接返回IP地址以提高性能。
8.keepAliveTimeout="300000" 在长连接情况下的长连接超时时间,单位为毫秒,和nginx保持一致,设置为300秒,即300秒该连接没有使用就关闭连接
9.maxKeepAliveRequests="500" 每个长连接能处理的最大请求次数,设置为500,即该长连接使用500次后关闭
10.processorCache="700" 协议处理器缓存了Processor对象以提升性能。该属性规定可以缓存的Processor对象数。-1表示不限制,默认为200。如不适用Servlet3.0异步处理,该值最好和maxThreads相同。如果采用了Servlet3.0异步处理,该值最好使用maxThreads和期望的请求并发数两者较大的。
11.autoDeploy="false" 设置为false关闭自动部署功能,否则Tomcat会定期检测appBase和xmlBase目录。

catalina.sh:
1.JAVA_OPTS="-Xms8192m -Xmx8192m -Xss1024K -XX:UseG1GC -XX:+UseStringDeduplication"
-Xms 初始堆内存大小,JVM初始化分配的内存空间
-Xmx 最大堆内存大小。对于服务器端部署,-Xmx和-Xms经常设置为一个值,这样可以节省程序运行过程中调整堆内存分配的耗时
-Xss 线程栈大小,给每个线程分配的内存大小,jdk1.5+版本后默认为1M
-XX:UseG1GC 指定JVM使用的垃圾收集器为G1收集器,G1是服务器类型的收集器,用于多核、大内存的机器。它在保持较高吞吐量的情况下,高概率满足GC(垃圾收集,可以理解为内存回收)暂停时间的目标。G1收集器同于那些需要较大堆内存(6GB以上)并存在GC延迟需求(稳定且可预测暂停时间低于0.5秒)的应用
-XX:+UseStringDeduplication 启用重复字符串删除。字符串重复数据删除利用大多数字符串相同的情况减少了字符串对象的内存足印。
注意:G1收集器的默认回收触发条件是堆内存占用比达到45%时,也就是说如果设置最大堆内存为8G,那么在堆内存使用达到3.6G的时候会触发垃圾收集,如果要调整这个占用比,可以通过设置-XX:InitiatingHeapOccupancyPercent参数来修改

nginx.conf:
1.worker_processes 8; nginx运行工作进程个数,一般设置cpu的核心或者核心数x2
2.worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; 每个nginx工作进程与cpu的亲和性,每个进程优先使用不同cpu
3.worker_rlimit_nofile 65535; 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
4.use epoll; nginx采用epoll事件模型,处理效率高
5.worker_connections 65535; 是单个worker进程允许客户端最大连接数
6.multi_accept off; 告诉nginx收到一个新连接通知后接受尽可能多的连接,默认是on,设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。
7.sendfile on; 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on
8.tcp_nopush on; 必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送。)
9.keepalive_requests 500; 每个长连接能处理的最大请求次数,设置为500,即该长连接使用500次后关闭
10.keepalive_timeout 300s 300s; 客户端与nginx保持长连接的超时时间,与上游的tomcat保持一致,第二个参数是在返回的请求头中带上keepalive时间
11.tcp_nodelay on; 也是防止网络阻塞,不过要包涵在keepalived参数才有效
12.client_header_buffer_size 4k; 客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
13.open_file_cache max=65535 inactive=20s; 这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
14.open_file_cache_valid 30s; 这个是指多长时间检查一次缓存的有效信息。
15.open_file_cache_min_uses 1; open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。
16.client_header_timeout 15; 设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个时间没有发送任何数据,nginx将返回request time out的错误
17.client_body_timeout 15; 设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据,和上面一样的错误提示
18.reset_timedout_connection on; 告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。
19.send_timeout 15; 响应客户端超时时间,这个超时时间仅限于两个活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx关闭连接
20.server_tokens off; 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
21.keepalive 200; 每个worker进程最多建立多少个长连接,设置算法:每个(Tomcat的keepalive数*Tomcat个数)/(Nginx的worker进程数*Nginx个数)
22.proxy_http_version 1.1; 执行nginx连接业务tomcat的版本为1.1,默认长连接方式
23.proxy_set_header Connection ""; 长连接的请求头,keepalive模式应设置为空
24.proxy_read_timeout 65; nginx请求tomcat的超时时间,设置为65秒,即65秒tomcat未响应则nginx返回请求超时到客户端
25.proxy_send_timeout 65; nginx发送请求到tomcat的超时时间,设置为65秒,即65秒nginx未成功将请求发送到tomcat则返回请求超时到客户端
26.proxy_buffer_size 4k; 该指令设置缓冲大小,该缓冲用于来自于上游tomcat响应的第一部分,在该部分中能够找到响应头
27.proxy_buffers 16 32k; 该指令指定用于响应上游服务器的缓冲数量和大小
28.proxy_busy_buffers_size 64k; 在从上游服务器读取响应时,该指令指定分配给发送客户端响应的缓冲空间大小,典型设置是将该值设置为proxy_buffers的两倍
29.proxy_temp_file_write_size 64k; 该指令控制nginx进程阻塞后台数据的时间,值越大,处理阻塞的时间越长

猜你喜欢

转载自www.cnblogs.com/chen/p/11242736.html