mysql优化:
软件方面:
1、选择最合适的字段属性。mysql在创建数据库的时候肯定是数据库中的表越小越好,这样才能提高查询的速度。比如说在存储电话号的时候,如果将其写成CHAR(255),这显然会给数据库带来很多不必要的空间浪费,明明CHAR(11)就可以解决的问题。
2、合理使用外键。
外键本身存在的作用就是保证表与表之间的参照完整性,使用外键可以有效地增加数据之间的关联性。在mysql中,外键是用于建立和加强两个表数据之间的链接的一列或多列,它表示一个表中的一个字段被另一个表中的一个字段引用。外键对相关表中的数据造成了限制,使MySQL能够保持参照完整性。
主键(primary key) 能够唯一标识表中某一行的属性或属性组。
3、正确使用索引。
索引是提高数据库性能的最常见的方法,能够正确地使用索引,能够大大地提高查询效率。
但是也不能够为所有的列都创建索引,因为它本身会占用内存,维护起来也很麻烦,它就是一把双刃剑,所以索引在使用的时候需要根据实际情况正确使用才行。
4、优化查询语句。
已将创建了索引的字段上不要使用函数,那样会导致索引失效。
查询时不鼓励使用like语句查询,因为那会消耗掉一部分系统的性能。
不要用 类似 * 号这种,数据库会进行全局检索,消耗性能。
5、打开慢查询。
6、调整连接数。
硬件方面:
内存,磁盘,cpu的升级。网络带宽的增加。
架构方面:
主从复制,读写分离。
nginx优化:
1、设置Nginx中进程数
user nginx;
worker_processes auto;
2、CPU亲和设置
cpu线程数配置,在高并发情况下,通过设置cpu亲和力来降低由于多核切换带来的性能损耗。
worker_processes auto;
worker_cpu_affinity auto;
需要手动写要绑定到CPU核的配置,cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭。
3、设置nginx最大可打开文件数
在nginx.conf文件全局配置中添加:
worker_rlimit_ nofile 102400;
然后还要修改系统可以打开的最大文件数 :
临时修改: ulimit -n 102400
永久修改 : vim /etc/security/limits.conf
* soft nofile 102400
* hard nofile 102400
4、Nginx事件处理模型
events {
use epoll; #使用epoll模型
worker_connections 1024; #单个进程允许客户端最大并发连接数
}
5、 sendfile on;(在http模块中)
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来传输,输出文件,当nginx是一个静态文件服务器的时候,开启sendfile配置项能大大提高nginx的性能。
6、设置长连接超时时间
主要目的是CPU,内存,控制连接数,因为建立连接也是需要消耗资源的
vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 65; (在http模块中)
keepalived_timeout 与client的keep-alive连接超时时间,单位是秒,服务器和客户端无交互后将在这个时间后关闭连接,长连接可以减少重建连接的开销,如果设置时间过长,用户又多,长时间保持连接会占用大量资源。
Tomcat优化:
1、jvm垃圾回收器优化设置
2、内存空间优化
JAVA_OPTS="-server -Xms4g -Xmx4g -XX:NewSize= -XX:MaxNewSize= "
-server:服务器模式
-Xms:堆内存初始化大小
-Xmx:堆内存空间上限
-XX:NewSize=:新生代空间初始化大小
-XX:MaxNewSize=:新生代空间最大值
生产案例:
[root@centos7 ~]#vim /usr/local/tomcat/bin/catalina.sh
# OS specific support. $var _must_ be set to either true or false.
JAVA_OPTS="-server -Xms4g -Xmx4g -Xss512k -Xmn1g -XX:CMSInitiatingOccupancyFraction=65 -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods"
cygwin=false
darwin=false
#一台tomcat服务器并发连接数不高,生产环境建议分配物理内存通常4G到8G较多,如果需要更多连接,一般会利用虚拟化技术实现多台tomcat
3、 线程池调整
[root@centos8 ~]#vim /usr/local/tomcat/conf/server.xml
......
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" />
......
常用属性:
- connectionTimeout :连接超时时长,单位ms
- maxThreads:最大线程数,默认200
- minSpareThreads:最小空闲线程数
- maxSpareThreads:最大空闲线程数
- acceptCount:当启动线程满了之后,等待队列的最大长度,默认100
- URIEncoding:URI 地址编码格式,建议使用 UTF-8
- enableLookups:是否启用客户端主机名的DNS反向解析,缺省禁用,建议禁用,就使用客户端IP就行
- compression:是否启用传输压缩机制,建议 “on”,CPU和流量的平衡
- compressionMinSize:启用压缩传输的数据流最小值,单位是字节
compressableMimeType:定义启用压缩功能的MIME类型text/html, text/xml, text/css, text/javascript
redis优化:
(7条消息) redis优化篇_Ariel小葵的博客-CSDN博客_redis优化