Tomcat内存调整和默认线程池调整

article/2025/9/18 1:48:34

上线了很久的一个项目(财政数据共享平台),由于领导要求,新来的同事就把新项目(社保数据共享)做在了该项目上,这就导致了许多的问题,先从日志说起,该同事把数据获取和传送都打印出来,导致打的日志实在太多,每过一两天,就导致日志超过1个G。我们都知道,别说一个G,就是超过几百兆的日志文件,vi都比较慢,更别说搜索查找了,所以昨儿写了一个脚本,按天备份和压缩日志,而且上线了调整后的日志打印,这事处理完了,就该说说正事了。

该项目采用定时任务的方式取数发数,一共配置了六个自动任务(spring+quartz),但是24号一整天,有一个自动任务莫名奇妙地未启动(检查了日志和访问记录,确定该自动任务未启动),但是查了23日的日志记录,该自动任务是启动的。该自动任务配置时间是17、20、23点整启动,查了其他自动任务,24号这一天也是启动的,也就是说,某一个自动任务莫名奇妙地到点未启,那么,我的猜测就是很有可能就是线程池满了。

查看Linux物理内存命令:

cat /proc/cpuinfo
cat /proc/meminfo
free (free -m或free -g)

这是在测试环境的模拟结果,可以很明细地看到物理内存不足,清空日志,删掉一些不必要文件,执行free -m查看:

然后我们修改tomcat设置内存大小防止服务器OOM,在tomcat的bin目录下修改catalina.sh文件,在cygwin=false之前添加:

JAVA_OPTS="-Xms512m -Xmx1024m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"

-Xms:表示Java初始化堆的大小,建议-Xms与-Xmx设成一样的值,避免JVM 反复重新申请内存,导致性能大起大落,默认值为物理内存的 1/64,默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40% 时,JVM就会增大堆直到-Xmx的最大限制。-Xmx:表示最大Java 堆大小,当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃,因此一般建议堆的最大值设置为可用内存的最大值的80%。如何知道我的JVM能够使用最大值,使用java -Xmx512M -version 命令来进行测试,然后逐渐的增大512 的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息,默认值为物理内存的 1/4,默认(MinHeapFreeRatio参数可以调整)空余堆内存大于 70% 时,JVM 会减少堆直到-Xms 的最小限制。-Xss:表示每个Java线程堆栈大小,JDK5以后每个线程堆栈大小为1M,以前每个线程堆栈大小为 256K。根据应用的线程所需内存大小进行调整,在相同物理内存下,减小这个值能生成更多的线程,但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用, 如果栈不是很深, 应该是128k够用的,大的应用建议使用256k或512K,一般不易设置超过1M,要不然容易出现out ofmemory。这个选项对性能影响比较大,需要严格的测试。-XX:NewSize:设置新生代内存大小。-XX:MaxNewSize:设置最大新生代新生代内存大小-XX:PermSize:设置持久代内存大小-XX:MaxPermSize:设置最大值持久代内存大小,永久代不属于堆内存,堆内存只包含新生代和老年代。

调整完内存,我们就该调整一下线程池了,进入Tomcat的conf目录,打开server.xml,可以看到线程池配置被注释了,那么,我们调整一下:

maxThreads="1000" 最大并发数 
minSpareThreads="100"///初始化时创建的线程数
maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount="700"// 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

 


http://chatgpt.dhexx.cn/article/j7GE0WB6.shtml

相关文章

lunix下修改tomcat的堆内存大小

修改tomcat的初始堆大小和最大堆大小 要添加在tomcat 的bin 下catalina.sh 里,位置cygwinfalse前 。注意引号要带上,红色的为新添加的. # OS specific support. $var _must_ be set to either true or false.JAVA_OPTS"-Xms256m -Xmx512m -Xss1024K -XX:Perm…

java对象内存布局和对象定位

目录 观察对象在内存中的存储布局 利用java agent 利用JOL工具 Java对象定位 直接指针寻址 间接寻址 JIT(Just In-Time Compiler) c1、c2 编译线程 c1, c2编译器线程高CPU消耗 - 潜在的解决方案 使用字节码和汇编语言同步分析volatile,synchron…

【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南

目录标题 Valgrind 工具的安装 交叉编译Valgrind Valgrind 工具的作用Memcheck 内存泄漏检测工具常规检测(程序结束后生成报告)重要参数长时间运行的服务使报告输出至文件报告分析示例一分析\_示例一示例二分析\_示例二 Massif堆栈检测工具Massif的基本…

C/C++开发,无可避免的多线程(篇一).跨平台并发编程姗姗来迟

目录 一、编译环境准备 1.1 编译环境配置 1.2 先睹为快的c11多线程编程示例 二、c/c并发编程支持 2.1 进程与线程 2.2 c/c多线程的并发编程 2.3 c11以前的多线程支持 2.4 c11以后的多线程支持 2.5 线程与互斥锁 2.6 跨线程安全问题 三、认识c/c的thread 3.1 std::thread类 3…

windows利器之cygwin

好久没写文章了,诸事烦身,脱不开。。。 不想开虚拟机占内存,同时还想在windows下使用linux命令,那就是cygwin了 第一部分 去官网下一个exe https://cygwin.com/install.html 直接运行, 基本都是默认, …

spi时序图怎么分析,怎么看懂spi时序图

我做产品的时候,最怕就是做IIC和SPI的通信。 这两种协议时序哪怕是延时时间有误差,都有可能导致通信不上。 出现问题的时候,如果没设备也很难排查问题到底出在哪里。 有时候这个产品写好的时序程序,换一个单片机用同一个程序移植过…

怎么看懂单片机时序图?

本人没有上过单片机相关的专业课,是在《计算机系统结构》里遇见的时序图。由于看不懂加之老师没有专门讲,因此自行查阅了相关的视频和博客。(参考视频已放在文末) 网上资源贫瘠,不过我也不需要太过深入的知识。 大家…

UML系列——时序图(顺序图)

引言 用例图、类图、活动图、时序图之间是什么关系? 时序图有什么作用? 先来模拟一下三国演义的赤壁之战的时序图,先知道它到底长什么样子,再深入介绍: 小伙伴惊呆了,这样画战略图,一目了然&…

UML图之五——时序图

一、什么是时序图 序列图表示了系统在参与者互动执行某一个用例期间,系统内部的一群对象的协作情况。一个用例就对应一个时序图。序列图是对系统动态行为进行描述。用于用例分析和设计阶段。 二、对比 1、序列图和协作图 序列图跟协作图相似,两种图传递的意思是一样的。不…

浅谈时序图

前序: 这周基本都在肝txmini项目,不知道是不是我菜,总觉得难度还是挺高的,所以就没太多时间整理知识点了。 项目进展了快大半个月了,最后因为性能问题,我们还是选择重构原来的代码。准备用golang去重构原本…

读懂时序图

UML建模之时序图(Sequence Diagram) 时序图简介(Brief introduction)时序图元素(Sequence Diagram Elements) 角色(Actor)对象(Object)生命线(Li…

时序图的概念

一. 时序图 (Sequence Diagram) 时序图 : 显示对象之间的关系, 强调对象之间消息的时间顺序, 显示对象之间的交互; 时序图是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。 1.时序图的…

UML之时序图详解

作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/17927131 动态图概念 : 从静态图中抽取瞬间值的变化描述系统随时间变化的行为, 动态图包括交互图活动图状态图, 这篇博客研究交互图 包括时序图和协作图; – 时序图 : 显示对象之间的关…

时序图简介

什么是时序图 来自百度百科的介绍: “又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或…

时序图

一. 时序图 (Sequence Diagram) 1.时序图的概念 时序图定义 : 描述了对象之间传递消息的时间顺序, 用来表示用例中的行为顺序, 是强调消息时间顺序的交互图; 时序图描述的事物: 时序图描述系统中类和类之间的交互, 将这些交互建模成消息交换, 时序图描述了类以及类之间的交换…

时序图,程序员的保命技能

最近,各个大厂都在开猿节流,程序员们在公司里,靠什么技能来“保命”? 一方面,大家要有过硬的编程基础,另一方面,对UML图的掌握也很重要。今天,我们就来说一说其中一种重要的UML图&am…

Spring Boot异步任务、异步消息

目录 1.异步任务 1.1.概述 1.2.使用 2.异步消息 2.1.概述 2.2.使用 1.异步任务 1.1.概述 举一个例子,我现在有一个网上商城,客户在界面点击下单后,后台需要完成两步: 1.创建客户订单 2.发短信通知客户订单号 这里面第2…

python_异步

深入理解 Python 异步编程 前言 很多朋友对异步编程都处于“听说很强大”的认知状态。鲜有在生产项目中使用它。而使用它的同学,则大多数都停留在知道如何使用 Tornado、Twisted、Gevent 这类异步框架上,出现各种古怪的问题难以解决。而且使用了异步框架…

httpx 与 异步

前言 HTTPX 是新一代的 python 解析库,它是一个功能齐全的 HTTP 客户端,用于Python 3,较requests(只能发送同步请求)和 aiohttp(只能发送异步请求)不同的是,它同时提供同步和异步 AP…

一文了解异步编程基础

什么是异步编程? 异步编程是指并发编程的范式,其中除了单个主应用程序线程之外,工作可以委托给一个或多个并行工作线程。这被称为非阻塞系统,其中整体系统速度不受订单执行的影响,并且多个进程可以同时发生。 函数从 …