第一次的性能调优

一、Tomcat调优

在进行单交易负载测试过程中,发现TPS不稳定,存在性能瓶颈,对Tomcat配置进行修改。

Tomcat的默认配置,性能并不是最优的,我们可以通过优化tomcat以此来提高网站的并发能力。提高Tomcat的性能可以分为两个方向。

1)服务器资源

服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。

2)优化配置

tomcat的3种运行模式 

tomcat的运行模式有3种:

bio: 
默认的模式,性能非常低下,没有经过任何优化处理和支持.

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)更好的并发运行性能。

apr: 
安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.


启动NIO模式

修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol

执行器优化(线程池)

在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。

开启并且使用 
配置:

 

 在Connector中指定使用共享线程池:

Executor重要参数说明:

name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;

namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;

maxThreads:该线程池可以容纳的最大线程数。默认值:200;

maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。

minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。

threadPriority:线程的等级。默认是Thread.NORM_PRIORITY

Connector重要参数说明:

executor:表示使用该参数值对应的线程池;

minProcessors:服务器启动时创建的处理请求的线程数;

maxProcessors:最大可以创建的处理请求的线程数;

acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。

二、修改日志模式

在进行单交易负载测试过程中,发现服务器资源CPU可达到300%,使用命令'''pidstat -d 1'''看到COMMAND为Java的程序写入量很大,记下进程号使用lsof来看Java进程到底打开了哪些

'''lsof -p xxx''',查看到debug日志写入量大导致的,然后对日志模式修改为error级别。

三、Redis调优

在进行单交易负载测试过程中,发现COMMAND为Redis的进程内存使用率大于90%,查看存储状态的缓存数据已有14GB左右。

然后对Redis缓存文件全部删除掉并修改配置文件的maxmemory参数为2GB,控制其最大可用內存并修改maxmemory-policy =volatile-ttl,

超出2GB后刪除生存时间最近的一個键。

规则名称 规则说明
volatile-lru 使用LRU算法删除一个键(只对设置了生存时间的键)
allkeys-lru 使用LRU算法删除一个键
volatile-random 随机删除一个键(只对设置了生存时间的键)
allkeys-random 随机删除一个键
volatile-ttl 删除生存时间最近的一个键
noeviction 不删除键,只返回错误

 LRU算法,least RecentlyUsed,最近最少使用算法。也就是说默认删除最近最少使用的键。

但是一定要注意一点!redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取3个键,删除这三个键中最近最少使用的键。

那么3这个数字也是可以设置的,对应位置是配置文件中的maxmeory-samples.

猜你喜欢

转载自www.cnblogs.com/kaymi/p/11634191.html