Linux下修改TOMCAT_HOME/bin/catalina.sh JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m windows下修改TOMCAT_HOME/bin/catalina.bat set JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m
参数详解
-server:启用 JDK的 server 版本;
-Xms:Java虚拟机初始化时堆的最小内存,一般与 Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而消耗性能;
-Xmx:Java虚拟机可使用堆的最大内存;
-XX:PermSize:Java虚拟机永久代大小;
-XX:MaxPermSize:Java虚拟机永久代大小最大值;
2、并发优化
maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码
3、缓存优化
compression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间
4、IO优化
同步并阻塞(JAVA BIO):服务器实现模式为一个连接一个线程(one connection one thread 想想都觉得恐怖,线程可是非常宝贵的资源),当然可以通过线程池机制改善,BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解.
同步非阻塞IO(JAVA NIO):异步阻塞IO 与BIO最大的区别one request one thread.可以复用同一个线程处理多个connection(多路复用),NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持.
异步非阻塞IO(AIO):主要与NIO的区别主要是操作系统的底层区别.可以做个比喻:比作快递,NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次),然后自己去取快递;AIO就是快递员送货上门了(不用关注快递进度),AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持
name:线程池名称,用于 Connector中指定。
namePrefix:所创建的每个线程的名称前缀,一个单独的线程名称为 namePrefix+threadNumber。
maxThreads:池中最大线程数。
minSpareThreads:活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在。
maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒。
maxQueueSize:在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发生。
prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程。默认值为false,即不启动。
threadPriority:线程池中线程优先级,默认值为5,值从1到10。
className:线程池实现类,未指定情况下,默认实现类为org.apache.catalina.core.StandardThreadExecutor。如果想使用自定义线程池首先需要实现 org.apache.catalina.Executor接口。
缓冲池是数据和索引缓存的地方
这个值越大越好,这能保证你在大多数的读操作时使用的是内存而不是硬盘
对性能影响非常大,一般可以设置内存的50%~80%
这是redo日志的大小
redo日志被用于确保写操作快速而可靠并且在崩溃时恢复
MySQL 5.5和5.6及以上版本可以调节,根据业务设置成500M到几G
应用程序需要频繁的写入数据,可以设置大点
3、innodb_file_per_table
是否采用独立表空间
默认关闭,建议设置成独立表空间
如果不设置,磁盘空间满了,删除表空间也无法释放,必须做到数据迁移
4、log-bin
是否开启binlog
默认关闭,生产项目建议开启
回滚和数据恢复
审计
5、max_connections
应用程序没有正确的关闭数据库连接,Too many connection错误
默认是100,建议设置成1000
应用程序使用连接或者在MySQL里使用进程
6、lower_case_table_names
是否区分大小写
默认区分,生产使用根据业务需求调整
7、character_set_server
字符集
迁移、数据库变更、数据导入等都是必须注意的,不然数据乱码了就会很麻烦
8、优化数据库思想
关键字段建立索引。
使用存储过程,它使SQL变得更加灵活和高效。
备份数据库和清除垃圾数据。
SQL语句语法的优化。
清理删除日志。
9、SQL语句优化原则
- 不做列运算:SELECt id WHERe age + 1 = 10,任何对列的操作都将导致表扫描,它包括数据库教程函数、计算表达式等等,查询时要尽可能将操作移至等号右边
- SELECT子句中避免使用 ‘ * ‘
- 用索引提高效率
- 避免在索引列上使用计算
- OR改写成IN:OR的效率是n级别,IN的效率是log(n)级别,in的个数建议控制在200以内
少用JOIN - 避免隐式转换
- 尽量避免在WHERe子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
列表数据不要拿全表,要使用LIMIT来分页,每页数量也不要太大 - 对于连续数值,使用BETWEEN不用IN:SELECT id FROM t WHERe num BETWEEN 1 AND 5
参考以下博主文章
Nginx高级篇-性能优化_风流三月1-CSDN博客_nginx优化前言消息爆炸的时代,对于速度的追逐已成了大家的标配。为了让自己的网站有更好的访问体验,网页加载控制在 3s 内,决定了网友愿不愿等你。静态文件的缓存优化了网页加载,超时机制会让 Client 与 Server 的响应不会长时间阻塞,GZIP 压缩提升 IO 效率、减少我们发送的数据量,限流来预防 DOS 攻击,TCP 参数调优提升传输效率。如何加速网页加载,提升网站访问的性能?Nginx 的系...https://blog.csdn.net/u012869196/article/details/86714846



