环境
针对高并发的优化主要包括以下几个方面
本人的环境是centos7+nginx+tomcat
linux:2个CPU,每个2核,总共4个线程,4g内存
查看方法: grep 'physical id' /proc/cpuinfo | sort -u grep 'core id' /proc/cpuinfo | sort -u | wc -l grep 'processor' /proc/cpuinfo | sort -u | wc -l
讯享网

讯享网
nginx:1.18
tomcat:8.5
tomcat优化
1.禁用AJP连接,ajp是用来和其他服务器交互的,所以把AJP连接器禁用。
讯享网修改conf下的server.xml文件,将AJP服务禁用掉即可。 <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="300" prestartminSpareThreads="true" maxQueueSize="100"/> <!-- 参数说明: maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 1000,根据硬件设施和业务来判断 minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25 prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了 maxQueueSize,最大的等待队列数,超过则拒绝请求 --> <!--在Connector中设置executor属性指向上面的执行器 也可以把executor的属性直接写到下边--> <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
3.tomcat的运行模式有3种
bio
tomcat 7之前默认的模式,性能非常低下
nio
nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。nio2比nio性能好一点,我使用的nio2
apr
性能最好,比较麻烦,没有尝试

讯享网<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />
直接添加 JAVA_OPTS=" -Xms256m -Xmx512m -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:$CATALINA_HOME/logs/gc.log"
具体参数根据实际使用情况调整
nginx优化
讯享网对应服务器的线程数(或者倍数),避免线程切换耗时 worker_processes 4; 打开文件数 worker_rlimit_nofile 65535; events { epoll模式 use epoll; 连接数 worker_connections 65535; } http { include mime.types; default_type application/octet-stream; 允许单个ip请求频率 limit_req_zone $binary_remote_addr zone=one:20m rate=r/s; sendfile on; keepalive_timeout 65; upstream nginx.com { server 127.0.0.1:8091; server 127.0.0.1:8092; server 127.0.0.1:8093; server 127.0.0.1:8094; } server { listen 80; server_name localhost; location / { proxy_pass http://nginx.com/; } } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/51512.html