当前位置: 首页 > 编程日记 > 正文

tomcat 性能设置

Tomcat性能调优:

找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧:

1、URIEncoding="UTF-8" :设置Tomcat的字符集。这种配置我们一般是不会设置的,因为关于乱码的转换我们会在具体项目中具体处理,直接修改Tomcat的字符集未免过于太死板。

2、maxThreads="300" :设置当前Tomcat的最大并发数。Tomcat默认配置的最大请求数是150个,即同时能支持150个并发。但是在实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的,更好的硬件、更高的处理器都会使Tomcat支持更多的并发数。如果一般在实际开发中,当某个应用拥有 250 个以上并发的时候,都会考虑到应用服务器的集群。

3、minSpareThreads="50" :设置当前Tomcat初始化时创建的线程数,默认值为25。

4、acceptCount="250" :当同时连接的人数达到maxThreads参数设置的值时,还可以接收排队的连接数量,超过这个连接的则直接返回拒绝连接。指定当任何能够使用的处理请求的线程数都被使用时,能够放到处理队列中的请求数,超过这个数的请求将不予处理。默认值为100。在实际应用中,如果想加大Tomcat的并发数 ,应该同时加大acceptCount和maxThreads的值。

5、enableLookups="false" :是否开启域名反查,一般设置为false来提高处理能力,它的取值还有true,一般很少使用。

6、maxKeepAliveRequests="1" :nginx动态的转给tomcat,nginx是不能keepalive的,而tomcat端默认开启了keepalive,会等待keepalive的timeout,默认不设置就是使用connectionTimeout。 所以必须设置tomcat的超时时间,并关闭tomcat的keepalive。否则会产生大量tomcat的socket timewait。 maxKeepAliveRequests=”1”就可以避免tomcat产生大量的TIME_WAIT连接,从而从一定程度上避免tomcat假死。

JVM性能调优:

Tomcat本身还是运行在JVM上的,通过对JVM参数的调整我们可以使Tomcat拥有更好的性能。目前针对JVM的调优主要有两个方面:内存调优和垃圾回收策略调优。

一:内存调优  找到Tomcat根目录下的bin目录,设置catalina.sh文件中JAVA_OPTS变量即可,因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。再说Java虚拟机的内存结构是有点复杂的,相信很多人在理解上都是很抽象的,它主要分为堆、栈、方法区和垃圾回收系统等几个部分组成,下面是我从网上扒的内存结构图:

内存调优这块呢,无非就是通过修改它们各自的内存空间的大小,使应用能够更加合理的运用,下图是我根据我机子的性能设置的参数,给各位详细解释一下各个参数的含义吧:

1、-Xmx512m :设置Java虚拟机的的最大可用内存大小,单位:兆(m),整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m。堆的不同分布情况,对系统会产生一定的影响。尽可能将对象预留在新生代,减少老年代GC的次数(通常老年回收起来比较慢)。实际工作中,通常将堆的初始值和最大值设置相等,这样可以减少程序运行时进行的垃圾回收次数和空间扩展,从而提高程序性能。

2、-Xms512m :设置Java虚拟机的的初始值内存大小,单位:兆(m),此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

3、-Xmn170m :设置年轻代内存大小,单位:兆(m),此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。一般在增大年轻代内存后,也会将会减小年老代大小。

4、-Xss128k :设置每个线程的大小。JDK5.0以后每个线程栈大小为1M,以前每个线程栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

5、 -XX:NewRatio=4 :设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 。

6、-XX:SurvivorRatio=4 :设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6。

7、-XX:MaxPermSize=16m :设置持久代大小为16m,上面也说了,持久代一般固定的内存大小为64m。

8、-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

二:垃圾回收策略调优  找到Tomcat根目录下的bin目录,也是设置catalina.sh文件中JAVA_OPTS变量即可。我们都知道Java虚拟机都有默认的垃圾回收机制,但是不同的垃圾回收机制的效率是不同的,正是因为这点我们才经常对Java虚拟机的垃圾回收策略进行相应的调整。下面也是通过我的一些需求来配置的垃圾回收策略:

Java虚拟机的垃圾回收策略一般分为:串行收集器、并行收集器和并发收集器

串行收集器:

1、-XX:+UseSerialGC:代表垃圾回收策略为串行收集器,即在整个扫描和复制过程采用单线程的方式来进行,适用于单CPU、新生代空间较小及对暂停时间要求不是非常高的应用上,是client级别默认的GC方式,主要在JDK1.5之前的垃圾回收方式。

并发收集器:

1、-XX:+UseParallelGC:代表垃圾回收策略为并行收集器(吞吐量优先),即在整个扫描和复制过程采用多线程的方式来进行,适用于多CPU、对暂停时间要求较短的应用上,是server级别默认采用的GC方式。此配置仅对年轻代有效。该配置只能让年轻代使用并发收集,而年老代仍旧使用串行收集。

2、-XX:ParallelGCThreads=4:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。

3、-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集 。

4、-XX:MaxGCPauseMillis=100 :设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。

5、-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。

并发收集器:

1、-XX:+UseConcMarkSweepGC:代表垃圾回收策略为并发收集器。

好了,到此我对虚拟机的垃圾回收策略总结就这么多,还是这句话:优化的学习一直在路上,下面还有一张从其他博客中偷到的图,据说以上三种GC机制是需要配合使用的。

转载于:https://www.cnblogs.com/psy5choit/p/7380699.html

相关文章:

SAP的安装后基本设定

SAPLogon登录时候是乱码,设定登陆配置的代码页属性,勾选Unicode off SAP英文系统下中文显示乱码 设定字符集为GB2312 RZ10常用的配置参数rz10 编辑系统参数文件 rdisp/gui_auto_logout & rdisp/keepalive 用于控制闲置时间(秒) login/system_client 用于控制默认…

如何通过 Scratch 教小朋友编程思维?

寒假的时候,我带着自己的小孩学 Scratch,希望通过这种图形化的语言来训练他的编程思维。开学之后,很多事情需要处理,所以拖到现在才写总结。希望对大家有所启发。 在介绍如何做这件事情之前,先介绍一个学习方面的基本…

零基础怎么学习UI设计?有哪些简单的学习方法?

UI设计近几年的就业前景是非常好的,所以很多人都想要学习UI设计,那么零基础怎么学习UI设计?有哪些简单的学习方法?下面小编就给大家做下详细的介绍。 零基础怎么学习UI设计?有哪些简单的学习方法? UI设计行业是很注重技术的,零基础如果直…

让资源管理器不显示最近常用文件夹

右键点任务栏,点“属性”->Startmenu->在Privacy框中,把第二个√ 去掉,如下图所示:

C# 写Windows服务

服务是一个运行在后台的程序,他没有界面,不能交互,只能孤独的独自运行。 在开始->运行->输入services.msc可以打开服务管理器,这里可以查看和管理服务   很多时候都会用到服务,因为服务简化了我们的操作&#…

技术图文:如何利用 C# 爬取 ONE 的交易数据?

投资一个金融产品,最基本的就是拿到这个金融产品的交易数据,对这些数据进行可视化来判断趋势。去年,我在听 李笑来 讲区块链的课程上知道了 BigOne 这个由 INB 投资的交易所,而 ONE 是 BigOne 的平台币,持有 ONE 可享受…

java程序猿必读的学习书籍,良心推荐!

每年都有很多人想要学习java技术,有的是自学,有的是报班学习,但是都免不了要看书籍学习,书籍学习带来的知识更加牢记,也可以随时做笔记,下面小编就为大家推荐java程序猿必读的学习书籍,希望能帮…

Autools学习总结(一)

一、Makefile 简介 在编写C/C程序的时候,我们经常需要编译并运行代码。在程序规模较小的情况下,可以简单地直接调用编译器来完成这项工作。然而,在很多情况下程序往往包括大量的代码文件,手动调用编译器变得麻烦无比。尤其要命的是…

简单的实现IOCP服务器模型

其实已经有很多大佬将原理讲的十分详细了,所以就不花费时间将原理再一次重复讲一遍,有需要的可以自行去查看。 http://blog.csdn.net/beyond_cn/article/details/9336043 这篇文章是我看的,原理介绍十分详细。不过有一些操作感觉比较复杂因此…

资料分享:送你一本《数据结构与算法JavaScript描述》电子书!

数据结构 是掌握计算机编程必须具备的技能。通常情况下,我想掌握一门编程语言所用的方法就是利用这门语言把数据结构中线性表、栈、队列、字符串、动态数字、整数集合、树、图、搜索、排序等涉及的算法全部写一遍。写完之后,基本上就把这门语言搞定了。 …

Python中爬虫框架或模块的区别

Python中爬虫框架或模块的区别,我们在Python的学习过程中,需要不断的总结知识点,这样我们才能进步的更快一些。 (1)爬虫框架或模块 Python自带爬虫模块:urllib、urllib2; 第三方爬虫模块:requests,aiohttp;…

SQL SERVER 2000写存储过程出现列名无效的解决方法

举一个Northwind的例子。DECLARE m_LastName nvarchar(20) DECLARE Sql varchar(256)SET m_LastName Fuller SET Sql SELECT * FROM Employees WHERE LastName char(39) m_LastName char(39) EXEC(Sql) 注意,要加上char(39)就可以了。转载于:https://www.cnblo…

如何利用 C# + Python 破解猫眼电影的反爬虫机制?

在 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息! 这篇图文中可以看到猫眼电影对“本月新增想看人数” 和 “总想看人数”进行了字符集加密。 在 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息! 这篇图文中也…

ZooKeeper学习笔记1-----------安装启动

ZooKeeper是一套协作服务,主要用来构建分布式架构的应用,通过ZooKeeper我们可以安全的处理分布式应用下的局部故障问题。我们知道ZooKeeper就是Hadoop中的分布式协作服务组件。下面我们进入ZooKeeper的安装部署。 安装Zookeeper https://zookeeper.apach…

软件测试培训完就业方向怎么选择

软件测试技术在近几年的发展前景是非常好的,越来越多的人都想要学习软件测试技术,报班是大多数人的选择,但是大家对于“软件测试培训完就业方向怎么选择”这个问题比较迷茫,我们来看看下面的详细介绍。 软件测试培训完就业方向怎么…

LeetCode实战:合并两个有序链表

题目英文: Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. Example: Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4 题目中…

Apache反向代理设置【转载】

编译Apache时要进行的设置./configure --enable-mods-shared"all proxy"1>修改 httpd.conf 文件中:LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_http_module modules…

Suricata的输出

不多说,直接上干货! 见官网 https://suricata.readthedocs.io/en/latest/output/index.html 总的来说,Suricata采集下来的数据输出分为:EVE 、 Lua Output 、 Syslog Alerting Compatibility 、 Custom http logging 、 Custo…

快速提高你的UI设计水平的一些小技巧

UI设计师这个岗位在最近几年的缺口是比较大的,很多企业都在招UI设计人员,想要学习UI设计或者提升UI设计技术的同学,可以看看小编分享的以下内容,善用这些UI设计小技巧,快速提高你的设计水平! 快速提高你的UI设计水平的…

hibernate join fetch

那天去了达内,试听了2个小时的课,刚好讲的他们的当当网项目,讲hibernate表关系映射这段来了,不过也够呛,投影仪看的眼睛点都不舒服,当时讲的也没认真听,听了个大概,就记住那个老师一…

Java IO 字节流与字符流 (三)

概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 字节流的抽象基类 InputStream,OuputStream 字符流…

LeetCode实战:两两交换链表中的节点

题目英文 Given a linked list, swap every two adjacent nodes and return its head. You may not modify the values in the list’s nodes, only nodes itself may be changed. Example: Given 1->2->3->4, you should return the list as 2->1->4->3.…

在UI设计中如何正确使用颜色

在我们进行UI设计时,颜色往往是我们表达理念重要的一点,但也是我们常常会忽视的一点。颜色其实如同语言一样,我们可以通过颜色的变化组合,来表达不同的情绪。 正确使用颜色不单能让我们吸引到客户,也能更好地表达我们的…

如何用Python做Web开发?——Django环境配置

用Python做Web开发,Django框架是个非常好的起点。如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手。 概念 最近有个词儿很流行,叫做“全栈”(full stack)。各大IT培训机构几乎都在宣传这一概念。告诉你只需要交1XXXX…

LeetCode实战:旋转链表

题目英文 Given a linked list, rotate the list to the right by k places, where k is non-negative. Example 1: Input: 1->2->3->4->5->NULL, k 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2…

blog地址:

blog地址: blog地址: http://blog.csdn.net/q107770540posted on 2010-11-19 08:36 Tim_ 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/q107770540/archive/2010/11/19/1881399.html

Spring MVC框架有哪些优点

Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。 Spring MVC具有如下特点: 是Spring框架的一部分,可以方便的利用Spring所提供的…

MVC+Ninject+三层架构+代码生成 -- 总结(四、數據層)

1.數據層使用了SqlSugar 庫類 。 數據層使用了SqlSugar 庫類 ,有興趣的 可以學習 http://www.codeisbug.com/Doc/8/1133,個人覺得比EF 簡單,容易上手,推薦1。 數據層使用代碼生成,所以考慮得比較多。 1.GetAllList()-…

台湾前十大科技公司拼不过三星(往后一点三星都不要买啦!)

台湾前十大科技公司拼不过三星,往后一点三星都不要买啦!本来还可以买它的内存和液晶,不过现在是一点都不能买了,再买就真反了他了! 三星像糖果也像毒药,让台湾LED类股1年涨3倍,但也让鸿海市值一夜之间消失350亿元(新台币,下同)。从来没有一刻…

技术图文:如何利用 C# 向 Access 数据库插入大量数据?

背景 通常我们在做数据分析与处理之前,需要把从网站爬取的数据或者从 甲方 系统中导出的数据存入到自己的数据库中。如果数据量小,直接利用 SQL的 Insert 语句逐条插入就好。可是数据量上万条之后,再利用这样的方法就会奇慢无比,…