记一次应用调优过程

记一次应用调优过程

压力测试使用jmeter工具,本文就不再介绍!
下载地址:apache softs

1.linux系统调优

1)用户资源限制(文件句柄数、进程数等)
vim /etc/security/limits.conf

tomcat soft nproc 2047
tomcat hard nproc 16384
tomcat soft nofile 10240
tomcat hard nofile 65535

vim /etc/pam.d/login

session    required     pam_limits.so

service sshd restart

2)socket回收

socket-详细分析No buffer space available

2.线程池

server:
  port: 8080
  tomcat:
    max-threads: 800
    accept-count: 1200
    min-spare-threads: 75

3.数据库连接池

并发性能测试时,若不考虑数据库性能,可以将连接池设置为不受限,从而测试应用瓶颈。
单从数据库角度,**连接数 = ((核心数 * 2) + 有效磁盘数)**肯定是性能最好的,但是还是要根据实际情况,例如长、短事务进行分析。

核心数不应包含超线程(hyper thread),即使打开了hyperthreading也是。如果活跃数据全部被缓存了,那么有效磁盘数是0,随着缓存命中率的下降,有效磁盘数逐渐趋近于实际的磁盘数。这一公式作用于SSD时的效果如何尚未有分析。

4核i7数据库服务器的连接池大小应该为((4 * 2) + 1) = 9
下面是自测结果:应用并发峰值100的情况下,确实数据库连接池为10好一点点!

aggregate-ehcache-pool10
在这里插入图片描述

aggregate-ehcache-pool100
在这里插入图片描述
比如一个混合了长事务和短事务的系统,通常是任何连接池都难以进行调优的。最好的办法是创建两个连接池,一个服务于长事务,一个服务于短事务。

再例如一个系统执行一个任务队列,只允许一定数量的任务同时执行,此时并发任务数应该去适应连接池连接数,而不是反过来。

4.jvm调优

/bin/catalina.bat

set CLASSPATH=
set JAVA_OPTS=%JAVA_OPTS% -server -Xms4096M -Xmx4096M -Xmn1536M -XX:PermSize=512M -XX:MaxPermSize=1024M -XX:SurvivorRatio=8 -XX:+UseFastAccessorMethods -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=4 -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -verbose:gc -Xloggc:../logs/gc.log -Djava.awt.headless=true

5. IO阻塞

主要体现在文件写入(ftp或本地磁盘IO)、控制台日志输出、logback日志写入(同步写、异步写、多线程写)
可通过线程dump分析,jvisualvm.exe或jstack.exe生成线程dump

mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
   **#此处为mybatis-plus通过system.out输出日志到控制台,影响性能(禁用可提升2~3倍)**
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述

druid:
  filters: stat,config
  min-idle: 10
  max-active: 100
  max-pool-prepared-statement-per-connection-size: 20
  min-evictable-idle-time-millis: 300000
  initial-size: 10
  max-wait: 60000
  time-between-eviction-runs-millis: 120000
  pool-prepared-statements: true
  # 高并发性能低
  **test-on-borrow: false**
  test-on-return: false
  test-while-idle: true
  # 持活,检测间隔默认1分钟(不宜超过3分钟,华为防火墙跨网段切断空闲连接时限3分钟)
  **keep-alive: false**
  validation-query: SELECT 'x' FROM DUAL
  # 校验超时1秒
  validation-query-timeout: 1

在这里插入图片描述
在这里插入图片描述

6.资源泄露不限于线程泄露、内存泄露

通过jdk自带工具jvisualvm.exe,若活动线程数,持续增加则可能存在线程泄露。
在这里插入图片描述

7.缓存击穿

1)now()当前时间等动态参数导致mybatis二级缓存失效
2)redis null值击穿

8.虚拟化共享CPU抢占

若最后一列,占用过高,极有可能是其它应用容器或虚拟机在抢占CPU
在这里插入图片描述

9.多线程同步锁

mybatis本地二级缓存同步锁

@CacheNamespace(flushInterval = 600000, size = 4096, implementation = org.mybatis.caches.ehcache.EhcacheCache.class)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬山境KL攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值