1、Tomcat conf中server.xml有个重要的性能配置,根据机器的硬件性能合理的配置常驻线程数以及最大线程数,还有等待队列线程数:

connectionTimeout="120000"

redirectPort="8443"

maxThreads="600"

minSpareThreads="250"

maxSpareThreads="250"

acceptCount="400"

uRIEncoding="utf-8"/>

关于maxThreads、acceptCount的意义请参见

这里只大概叙述如下:

这两个值如何起作用,请看下面三种情况

情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。

情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。

情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused

一般的服务器操作都包括量方面:1计算(主要消耗cpu),2等待(io、数据库等)

第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。

第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内存设置和linux的open file限制。

这里以业务服务器为例,机器硬件好一点的话,4核2.5G的,maxThreads开到600-1000,是比较理想的。

如果想继续提高服务器的并发数,将acceptCount也设置为和maxThreads一样大。但是也需要合理的考虑单次的请求响应处理时间,一味的增加acceptCount只是避免了过多的超时拒绝,但是对于用户体验还是最好5秒之内一次响应能够处理完,这个时候增加后端的并行的Tomcat服务器将是明智的选择。

该图的就是在配置如下参数时,Tomcat线程池统计信息,在常态下维持250个线程,当应对高并发的情况下,系统不断地创建线程直到maxThreads设置的最大值为止。

maxThreads="600"

minSpareThreads="250"

maxSpareThreads="250"

acceptCount="400"

2、JVM虚拟机的启动配置 bin/catalina.sh

设定虚拟机的server启动方式,以及堆内存的初始分配大小,垃圾收集机制,线程最大堆栈配置数,新生代内存大小等等

a 、JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升。JVM如果不显式指定是-Server模式还是-client模式,JVM能够根据下列原则进行自动判断(适用于Java5版本或者Java以上版本);

b、线程堆栈 -Xss 1024K 可以根据业务服务器的每次请求的大小来进行分配;

c、-xms -xmx  是 jvm占用最小和最大物理内存配置参数,一般讲两者配置一样大,这样就免去了内存不够用时申请内存的耗时;

d、-XX:PermSize=128M -XX:MaxPermSize=128m

从前人的各类文章上了解到jvm的垃圾回收机制,这里只是简单提一下, jvm的内存分为2大类型,一个是perm型,另一个是generation型。perm区域存放的是class这些静态信息,一般默认64m,如果你的项目很大,有可能一启动就报错,out of memory permsize什么的,另外如果用spring框架的话很多类是动态反射加载的,运行一段时间有可能出现此异常,这种情况,设置下permsize就可以了。

另外一个类型才是重点,应用的代码基本上在这个区域活动,new的类都会在这个区域,而且jvm决大部分工作都在这里搞了,这个区详细说很复杂,有空去看sun资料,这里也只大概提下:这个区包含新生代和老生代区域,所有new出来的会放置在新区域,而多次回收失败的一些一直被使用的实例则被转移到老生代区域,所以新生代区域活动是最频繁的。新生代内存不足时会促发一次 这个区的gc ----然后再到老生代的gc---最后才轮到full gc。full gc代价很高,应该尽量避免,尽量在newsize参数的这个区gc,一般配置

newsize分配到总内存1/4左右,---最终,如果full gc 还是内存不足,那就会引发out of memory 常见的那种。

-----------摘自jvm 参数优化---笔记

e、-XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:+UseAdaptiveSizePolicy

这几个参数,一般的应用没什么必要,UseParallelGC 并行回收,XX:ParallelGCThreads 并行回收线程数,只有配置了UseParallelGC有效。UseAdaptiveSizePolicy,让jvm根据情况动态适配参数,当然如果你指定了某些参数,jvm就不会对那些参数再去调整的,加这个参数只要是让我们考虑不全的其它参数能让jvm帮忙做微处理。 总之UseParallelGC目的是 加快jvm回收频率 。

关于垃圾回收更详细的文章请见:

下图只是简单的配置了:

JAVA_OPTS="-server -Xms1536m -Xmx1536m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"

Tomcat堆内存的垃圾回收情况,可以看到默认是当系统使用到了阀值后进行GC回收

linux虚拟机cpu高耗gc,Tomcat服务器-并发压力测试下调优注意点小结 JVM client模式和Server模式的区别 jvm 参数优化---笔记 tomcat查看GC信息...相关推荐

  1. VMware Linux虚拟机CPU占用过高

    VMware Linux虚拟机CPU占用过高 虚拟机内存占用过高是一个巨大的问题,之前已经讲过,而CPU占用过高更是重上加重,今天就来讲讲CPU占用过高的解决方法 CPU占用过高其实很简单,总共有两个 ...

  2. 虚拟机web服务器配置ppt,在Linux虚拟机下配置apache构建web服务器.doc

    在Linux虚拟机下配置apache构建web服务器.doc 上传人:清**** 文档编号:55209606 上传时间:2020-03-08 格式:DOC 页数:2 大小:32.50KB 下载提示(请 ...

  3. java内存泄漏跟栈溢出,8.《深入理解Java虚拟机》内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别...

    内存溢出和内存泄露的区别 内存溢出:指的是程序在申请内存的时候,没有足够大的空间可以分配了. 内存泄露:指的是程序在申请内存之后,没有办法释放掉已经申请到内存,它始终占用着内存,即被分配的对象可达但无 ...

  4. Web服务器性能压力测试工具http_load、webbench、ab、Siege使用教程

    Web服务器性能压力测试工具http_load.webbench.ab.Siege使用教程 作者: feng 日期: 2012/07/25 发表评论 (0) 查看评论 一.http_load 程序非常 ...

  5. 服务器进行压力测试+性能测试

    1: 影响响应时间的因素 (1): 硬件方面: 1:服务器的cpu 2:服务器内存 3:服务器带宽 (4): 软件方面 1: 数据库的优化 2: sql语句的优化 3: json 串返回的大小 在使用 ...

  6. 服务器ddos压力测试注意事项及常用工具

    据有关数据显示,在刚刚过去的2019年里,针对多媒介社交网站中的DDOS攻击占比从第一季度的46%增长到第四季度的65%,且DDoS攻击网站事件正在呈上升趋势.想要有效地防范ddos,可以使用香港高防 ...

  7. 高防服务器ddos压力测试的工具推荐

    目前DDoS攻击的成本越来越低,在商业竞争.黑客行动主义以及网络敲诈等领域,DDoS攻击网站事件正在呈上升趋势.最基本的DDoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服 ...

  8. 游戏服务器的压力测试应该如何进行

    游戏服务器的压力测试应该如何进行?自己写机器人还是 LR 等工具? 1 条评论 分享 按投票排序按时间排序 14 个回答 5赞同 反对,不会显示你的姓名 李丹阳,会敲代码的喵.后端程序猿,爱PHP,爱 ...

  9. 服务器分发系统如何做性能测试,如何针对音视频流媒体服务器分发的RTSP视频流进行并发压力测试?...

    对于普通视频网站来说,并发数量是一个非常有参考价值的数据,在部分时间段,并发数量也许不大,但是也可能短时间内暴涨且没有上限,此时就需要系统具备良好的扩张能力和负载均衡能力.那么如何针对流媒体服务器分发 ...

最新文章

  1. ramdisk plus v11.5安装内存虚拟硬盘
  2. 零基础学python多久可以工作-零基础学习python,要多久才可以学好并且找到工作?...
  3. List、Vector、ArraryList、LinkedList
  4. 如何设计ABAP/4 Query报表
  5. 使用php最容易犯的11个MySQL错误。
  6. 内容生态搜索趋势研究报告
  7. 文章之间的基本总结Activity生命周期
  8. 从stm32转向Linux,STM32MP1Distrib
  9. Java自学要多久?
  10. 通过计算机和网络进行整个商务贸易活动,电子商务概论
  11. 数字电路逻辑设计_第三版_微课版_第四章思考题与练习题(附答案)
  12. 菜鸟的JavaScript自学笔记整理
  13. RTL8111E datasheet中提到的术语
  14. 微信公众号网页分享设置及问题
  15. 分辨率、像素、像素尺寸、GSD、图片文件大小
  16. Polkadot的PLO第一阶段: Equilibrium在DOT上筹集了850万美元
  17. python计算学分绩点_GitHub - junfenghu/calc_GPA: 计算学分基点
  18. 高中数学40分怎么办_高中数学40分怎么办?
  19. jenkins报错:java.lang.illegalstateexception already existed will not overwrite with
  20. 【模拟电路】关于NPN和PNP导通的应用以及条件

热门文章

  1. python selenium po_python+selenium基于po模式的web自动化测试框架
  2. vue cli脚手架详解_vue-cli脚手架搭建vue项目搭建
  3. Windows和VMware下ubuntu切换界面的快捷键
  4. 全栈python_Pyodide:在浏览器端实现Python全栈科学计算
  5. mfc对话框ok没效果_摄影色调效果(冷色调与暧色调)
  6. 系统syslog网络转发配置
  7. C++socket编程(七):7.1 http协议讲解,通过抓包和telnet分析
  8. redis基础类型:string
  9. jieba库词频统计_运用jieba库进行词频统计
  10. oracle上浮下浮分析函数_Oracle分析函数简析