结合项目说下压测/调优

  • 项目压测,cpu占用比较大,除了测试服务器本身的性能影响外,还存在项目本身的问题
  • 这是服务器的配置

4core,8G,磁盘50g,作为一个高峰期并发不到1000的的项目,总的来说这个配置还能用.然后并发刚干到30,就这样了

  • 最下面两条的是两台服务器内存.粉色的是项目所在服务器的cpu,蓝色是db cpu,项目占用cpu彪的太狠,所以展开调查
  1. 压测,将rate up时间弄得稍微长一点.项目是docker服务,jdk版本1.8
    • docker exec -it id bash :进入容器.需要进入容器操作jstack命令
    • jps -l:查看java服务pid,当然容器内部就一个服务包和openjdk
    • jstack -l pid >> /opt/xxx.txt: 将堆栈信息打出来
    • 通过jstat -gcutil pid查看M的值,即MetaSpace区使用率
    • 通过jstat -gc pid 2s(间隔时间) 3(持续次数)命名查看MU/MC即Meta区的使用率
    • 使用jstat -gccause pid观察cms fgc
    • 通过jinfo pid得到具体信息
    • 通过jinfo -flag <参数> pid得到此参数信息
    • gceasy: 利用好这个网站,这个网站可以将你的堆栈信息解压并分析,基本堆栈信息里就四种状态,WAITING TIME_WAITING RUNABLE BLOCKED
      runable属于正常信息,可以忽略,如果waiting和timewaiting的信息过多也需要注意,这个是否正常就要结合场景看下了.最后是blocked,blocked是阻塞状态的信息.这种是不正常的
      一定要解决的,这回项目压测遇到的就是这种问题.项目延申用了Prometheus监控,里面写的到一个拦截器出现延迟加载的现象.最后处理掉了.解决了此次问题.当然还有些waiting的,是一个验证类,
      每次请求都重新构建一次,把它提出来之后log没这种提示了
  2. 这是gceasy的网址:https://gceasy.io/,选tool,把堆栈信息日志打成zip格式,点analyze,它会自动解析那些日志