以下优化仅供参考,具体根据实际情况来定。(误犯)
应用级调优
nginx的调优
可以使用源码编译安装,需要什么装什么
CPU的亲和性
nginx工作进程数,可根据cpu核数调整
[root@localhost ~]# vim /etc/nginx/nginx.conf
worker_processes 8; 根据cpu核数定
因为8个进程不一定平均分配,所以可以通过为nginx分配指定CPU亲和性来分配进程到核中。
[root@localhost ~]# vim /etc/nginx/nginx.conf
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
补充: 调整单个nginx进程的最大值
worker_rlimit_nofile 10240; //此处可与下列文件描述符中的增加用户级的值保持一致
文件描述符
查看用户级限制
-bash-4.2$ ulimit -n //nginx用户
1024
增加用户级限制
[root@localhost ~]# ulimit -SHn 10240 //临时生效
vim /etc/
[root@localhost ~]# vim /etc/security/limits.conf
添加
nginx hard nofile 10240
nginx soft nofile 10240 //永久有效,重启服务器生效
查看系统级限制
[root@localhost ~]# sysctl -a |grep file
fs.file-max = 95086
或
[root@localhost ~]# cat /proc/sys/fs/file-max
增大系统级限制
[root@localhost ~]# vim /etc/sysctl.conf
fs.file-max = 102400 //添加这一句,指定值,根据自己的情况来定
保存后使用sysctl -p 生效
连接数
[root@localhost ~]# vim /etc/nginx/nginx.conf
worker_connections 65535; //设置一个worker进程可同时打开的最大连接数,与端口数有关
Nginx事件处理模型(IO模型)
[root@localhost ~]# vim /etc/nginx/nginx.conf
events {
use epoll; epoll为一种高性能的I/O模型
worker_connections 65535;
}
如果想详细了解epoll请教度娘
gzip压缩
在配置文件中开启gzip on //使用gzip压缩功能,可以为我们节约带宽,加快传输效率,但同时也会消耗CPU资源
其他参数
使用sendfile传输文件,普通应用设为on,下载等IO重负荷的应用设为off,因为大文件不适合放buffer中
sendfile on
sendfile为on时,这里也应该设为on,数据包会累积一下再一起传输,可以提高传输效率
tcp_nopush on
晓得数据包不等待直接传输,和tcp_nopush相反,但同时设置为on时nginx会平衡这两个功能
tcp_nodelay on
长链接的超时时间
keepalive_timeout 65
另外客户端上传文件的最大值,如一些视频类网站,需要上传视频,就可以注意这个值的大小
client_max_body_size 100m
php-fpm调优
[root@localhost ~]# vim /etc/php-fpm.d/www.conf
pm = dynamic 对于专用服务器,pm可以设置为static。如果选择static,则由
pm.max_children指定固定的子进程数。如果选择dynamic,则可以动态调整下面几个参数
pm.max_children = 64 子进程最大数,我这里只是参考值(看系统资源决定,视实际环境测
试后调整,下几个参数也一样)
pm.start_servers = 20 启动时默认启动的进程数
pm.min_spare_servers = 5 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进
程 pm
.max_spare_servers = 10 保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
rlimit_files = 65535 打开的文件描述符数量,不能大于系统的限制(系统可以使用
ulimit命令查看和设置)
tomcat的调优
此文件仅供参考,参数等根据自己服务器的情况而定
启动内存优化
tomcat启动时JVM会分配一个初始内存和最大内存
[root@localhost ~]# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 27938 root 53u IPv6 541608 0t0 TCP *:webcache (LISTEN)
[root@localhost ~]# /usr/local/jdk1.8.0_191/bin/jmap -heap 27938(上面的PID)
MaxHeapSize = 255852544 (244.0MB)
修改catalina.sh文件,再次重启
[root@localhost ~]# vim /usr/local/tomcat/bin/catalina.sh
JAVA_OPTS='-Xms244m -Xmx1024m
-Xms244m JVM初始化的大小,-Xmx1024m JVM最大值 (具体根据自己服务器配置)
禁用AJP
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!--Connector port="8009" protocol="AJP/1.3" redirectPort="8443" --/>
找到8009端口这俩行注释
重启tomcat,就没有8009了
IO优化
tomcat中一共有四种模式:BIO、AIO、NIO、APR
- BIO,同步阻塞式IO,一个请求占一个线程
- NIO,同步非阻塞IO,一个线程处理多个请求
- AIO(也叫NIO2),异步非阻塞IO,一个线程更高效处理多个请求
- APR, 通过操作系统级别来解决异步IO问题,可大大提高tomcat性能。需要编译配置.
Tomcat8以上版本,默认使用的是NIO模式
换成apr的步骤
1、下载apr与apr-util软件包
官方下载地址:https://mirrors.cnnic.cn/apache/apr/
2、解压并编译安装apr
[root@localhost ~]# tar xf apr-1.6.5.tar.bz2 -C /usr/local/
[root@localhost ~]# tar xf apr-util-1.6.1.tar.bz2 -C /usr/local/
[root@localhost ~]# cd /usr/local/apr-1.6.5/
[root@localhost ~]# ./configure --prefix=/usr/local/apr && make && make install
3、解压并安装apr-util,需要指定apr的路径进行联系
[root@localhost ~]# yum install expat-devel -y
[root@localhost ~]# cd /usr/local/apr-util-1.6.1/
[root@localhost ~]# ./configure --with-apr=/usr/local/apr
[root@localhost ~]# make
[root@localhost ~]# make install
4、加入环境变量
[root@localhost ~]# vim /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
[root@localhost ~]# source /etc/profile
5、在tomcat9的bin目录中编译tomcat-native (没有包的话需要下载,默认就有)
[root@localhost ~]# cd /usr/local/tomcat/bin/
[root@localhost ~]# tar xf tomcat-native.tar.gz
[root@localhost ~]# cd tomcat-native-1.2.19-src/native/
[root@localhost ~]# ./configure --with-apr=/usr/local/apr --with-java home=/usr/local/jdk1.8.0_191/ && make && make install
6、修改配置文件
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
把protocol="HTTP/1.1" 改为protocol="org.apache.coyote.http11.Http11AprProtocol"
7, 重启tomcat
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
查看/usr/local/tomcat/logs/catalina.out 日志是否有http-apr
线程池
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能
maxThreads: 可以处理的最大并发请求数,默认150
minSpareThreads: 线程始终保持运行的最小数量,也是初始化的线程数,默认4
acceptCount: tomcat维护最大的队列数(所有线程在使用,就会放入队列中,队列满了,新的请求则不处理)
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
找到以下这段,打开注释,并调大maxThreads与minSpareThreads
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="50"/>
注释原来的connector
<!--
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
-->
打开Connector executor配置段,并指定为tomcatThreadPool,协议也改为apr
<Connector executor="tomcatThreadPool"
port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
acceptCount="100"
redirectPort="8443" />