linux解决Tomcat内存溢出

2023-10-29

Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA 虚拟机 。JAVA程序启动时JVM会分配一个初始内存和最大内存给程序。当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。

一、常见的 Java 内存溢出有以下三种:
1. java.lang.OutOfMemoryError: Java heap space 即JVM Heap溢出

解释说明:JVM在启动的时候会自动设置JVM Heap的值,JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。其初始空间默认是物理内存的1/64,最大空间不可超过物理内存。JVM提供-Xmn -Xms -Xmx等选项来进行设置。

出错场景:在JVM中,如果98%的时间是用于GC,且可用的Heap size不足2%时,将会出现JVM Heap溢出

解决方法:修改JVM Heap的大小。

2. java.lang.OutOfMemoryError: PermGen space 即PermGen space溢出
解释说明:PermGen space是指内存的永久保存区域。这个区域主要存放Class和Meta信息,Class在被Load时就会被放入PermGen space。

出错场景:如果APP载入很多CLASS,就可能会出现PermGen space溢出。(因为sun的GC不会在程序运行时对PermGen space进行清理)常见于web服务器对JSP进行pre compile的时候

解决方法:修改MaxPermSize大小
3. java.lang.StackOverflowError 即栈溢出

解释说明:JVM采用的是栈式的虚拟机,函数的调用过程都体现在堆栈和退栈上。

出错场景:通常栈的大小是1-2MB的,如果调用构造函数的 “层”太多,则会出现栈溢出

解决方法:修改程序

二、Tomcat的JVM内存溢出解决方法
在生产环境中,tomcat内存设置不好很容易出现JVM内存溢,解决方法就是修改Tomcat中的catalina.sh文件。
在catalina.sh文件中,找到cygwin=false,在这一行的前面加入参数,具体如下

# vi TOMCAT_HOME/bin/catalina.sh
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"

其他说明:
1.“m”说明单位是MB,否则默认是KB
2.一般使用物理内存的80%作为堆大小
3.一般把-Xms和-Xmx设为一样大
4.一般把-Xmn设置为-Xmx值的1/4
5.一般将堆的总大小的50%到60%分配给新生成的池

三、jvm参数说明:
-server 一定要作为第一个参数,启用JDK的server版本,在多个CPU时性能佳
-Xms java Heap初始大小。 默认是物理内存的1/64。
-Xmx java heap最大值。建议均设为物理内存的80%。不可超过物理内存。
-Xmn java heap最小值,一般设置为Xmx的3、4分之一。
-XX:PermSize 设定内存的永久保存区初始大小,缺省值为64M。
-XX:MaxPermSize 设定内存的永久保存区最大大小,缺省值为64M。
-XX:SurvivorRatio=2 生还者池的大小,默认是2。如
-XX:NewSize 新生成的池的初始大小。 缺省值为2M。
-XX:MaxNewSize 新生成的池的最大大小。 缺省值为32M。
+XX:AggressiveHeap 让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-Xss 每个线程的Stack大小
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-XX:+UseParNewGC 缩短minor收集的时间
-XX:+UseConcMarkSweepGC 缩短major收集的时间
-XX:userParNewGC 可用来设置并行收集(多CPU)
-XX:ParallelGCThreads 可用来增加并行度(多CPU)
-XX:UseParallelGC 设置后可以使用并行清除收集器(多CPU)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux解决Tomcat内存溢出 的相关文章

  • 针对 openpose 将 GCC 9.3.0 降级到 7 后,cuda_compile_1_ generated_batch_norm_layer.cu.o.Release.cmake 出现 CMake 错误

    你知道我该如何解决以下错误吗 这是在我使用以下命令从 GCC 9 3 0 降级到 7 后发生的 使用以前版本的 GCC 我收到此错误 CMake 不支持的 GNU 版本 不支持高于 8 的 gcc 版本 https stackoverflo
  • 如何判断输入来自哪个键盘

    设想 我有一个 USB RFID 读取器 将其连接到笔记本电脑后 它可以用作新连接的 USB 键盘 例如无需安装任何驱动程序 当接触带有 RFID 标签的阅读器时 它进入我当前的窗口 例如终端 外壳 RFID 号码 例如0009339384
  • Linux 在崩溃时自动重新启动应用程序 - 守护进程

    我有一个运行嵌入式 Linux 的系统 它的持续运行至关重要 基本上 它是一个与传感器通信并将数据中继到数据库和 Web 客户端的过程 如果发生崩溃 如何自动重启应用程序 此外 还有多个线程进行轮询 例如套接字和 uart 通信 如何确保没
  • python os.path.exists() 对于存在的 nfs 挂载目录文件失败

    我基本上有一个用于网站的网络服务器和另一个仅存储文件的网络服务器 文件服务器通过安装其目录之一连接到主服务器 该网站运行 Django 所以我主要处理 python 不管怎样 我似乎遇到了一些问题 文件被报告为不存在 即使它们实际上存在 基
  • 错误:‘:’标记之前需要初始化程序

    我正在尝试编译一些 C 代码 可以在 Windows 上使用 Visual Studio 2012 进行编译 g 4 4 我有这段代码 const std string cnw restoreSession const std vector
  • 很好的 C 库集合? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个很好的 ANSI C 库集合 用于处理向量 哈希映射 二进制树 字符串处理等 Try g
  • 如何使用c在Linux中获取当前时间戳(以纳秒为单位)

    我知道我们可以使用clock gettime CLOCK MONOTONIC 我尝试问的问题是 如果我需要以纳秒为单位的时间 从时代来看 这将是一个巨大的数字 例如 自纪元以来的秒数是13438461673 so 13438461673 1
  • 为什么我不能用这个循环从 bash 历史记录中删除多个条目

    这个循环将显示我想要做的事情 但是如果我删除echo从中 它实际上不会删除任何内容 history grep 0 5 0 9 ls cut c1 5 while read id do echo history d id done 我添加了缩
  • Cmake 错误未定义对“pthread_create”的引用

    我对 cmake FindThreads 进行了测试 这是我的源代码test cpp和CMakeLists txt include
  • C++向量数组运算符计算成本高?

    我一直都知道 C 的丰富抽象会带来一定的计算开销 但我的印象是 一旦应用了正确的编译器优化 这种开销几乎可以忽略不计 我很好奇这种开销到底有多大 所以我编写了一个简单的测试来确定这一点 该测试是一个模板化函数 它接受一个容器变量 为容器中的
  • 参数无效”设置键“net.core.somaxconn”

    我尝试设置Linux内核 编辑后 etc sysctl conf并执行sysctl p它显示错误 Invalid argument setting key net core somaxconn Linux 发行版 Ubuntu 12 04
  • 如何在 Linux 上正确地将网络接口置于混杂模式

    那么如何正确地做到这一点呢 我知道如何通过创建套接字 然后使用 ioctl 设置 IFF PROMISC 标志来做到这一点 如 如何在C中检查网络设备状态 https stackoverflow com questions 3055622
  • Python select() 行为很奇怪

    我在理解 select select 的行为时遇到一些困难 请考虑以下 Python 程序 def str to hex s def dig n if n gt 9 return chr 65 10 n else return chr 48
  • c - 后台运行的程序的退出状态

    我有一个任务 其中我必须创建一个迷你 shell 它能够执行很多操作 包括作业控制 我设法使用 fork 和 execvp 创建新的工作 但我还想获取 execvp 运行的程序的退出代码 根据我从其他帖子中查找到的内容 我可以使用以下方法来
  • struts2应用程序未运行

    我是 Maven 和 struts2 的新手 当我尝试运行我的程序时出现以下错误 严重 调度程序初始化失败 无法加载配置 操作 文件 E workspace metadata plugins org eclipse wst server c
  • Zip 实用程序在 Linux 中每次都给我不同的 md5sum

    当我在 Linux 中压缩 Zip 2 31 同一个文件时 每次都会得到不同的校验和 如何保持上次的 md5sum 相同 我正在使用 yum 提供的最新 zip 更新 生成的存档不仅包含压缩文件数据 还包含 额外的文件属性 如参考zip 文
  • 如何在多行而不是单行输出上打印 Linux 组名称

    我尝试过 getent group 命令 id Gn user 和一些 sed 组合 但我认为我无法实现 因此向其他程序员伸出援手 我希望能够打印此 groups abc123输出 abc123 devops 构建测试设计 预期输出 gro
  • top命令的CPU使用率计算

    我正在尝试使用 GNU coreutil top 的公式来计算 CPU 使用率的百分比 但 top 正在使用一些 half total 来计算百分比 即在百分比上添加 0 5 在top的utils c中 以下行 在 3 8 beta1 中
  • 在Linux服务器中安装ZLIB

    我要安装ZLIB http www techsww com tutorials libraries zlib installation installing zlib on ubuntu linux php在Linux服务器中 我的服务器帐
  • Linux 堆栈大小

    我正在寻找 Linux 内核中堆栈的良好描述 但我发现找到任何有用的东西出奇地困难 我知道大多数系统的堆栈限制为 4k 而其他系统则限制为 8k 我假设每个内核线程 下半部分都有自己的堆栈 我还听说 如果中断发生 它会使用当前线程的堆栈 但

随机推荐

  • java版工程项目管理系统源码+系统管理+系统设置+项目管理+合同管理+二次开发

    工程项目各模块及其功能点清单 一 系统管理 1 数据字典 实现对数据字典标签的增删改查操作 2 编码管理 实现对系统编码的增删改查操作 3 用户管理 管理和查看用户角色 4 菜单管理 实现对系统菜单的增删改查操作 5 角色管理 管理和查看用
  • 7月7日!GLM大模型技术前沿与应用探索

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 随着AIGC时代的到来 大型语言模型逐渐成为学术界和工业界的关注焦点 近期 各种大语言模型的涌现给自然语言处理领域的研究带来了诸多挑战 也逐渐对计算机视觉和计算机生物等领域产生了
  • KeyError: 'Spider not found:name一样,为何还是找不到spider 多种解决方案,总有一个适合你!

    第一种 运行的main文件中的爬虫名字与爬虫文件中的name不相同 解决方案 令两者名字相同即可 第二种 爬虫文件夹中缺少 init 文件 一开始是直接在spider文件夹下创建的爬虫文件 然后把多个爬虫文件放进stt的文件夹中 运行mai
  • windows快速搭建caffe环境

    下载预编译文件 下载预编译文件 跳转链接 http caffe berkeleyvision org installation html https github com BVLC caffe tree windows 创建虚拟环境 由于本
  • SpringCloud的优势

    1 代码耦合度较低 不会影响其他模块的开发 2 极大的减轻了团队开发成本 可并行开发 不用过多关注其他人怎么开发 3 配置比较简单 基本用注解就能实现 不能使用过多的配置文件 4 微服务操作 实现跨平台的 可以使用不同的语言开发 5 每个微
  • 用Python手撕一个批量填充数据到excel表格的工具,解放双手!

    作者 锋小刀 微信搜索 Python与Excel之交 关注我的公众号查看更多内容 Hi 大家好 今天这篇文章是根据批量填充数据的进阶版 基础版本就一段很简单的代码 虽然简单 但如果这个模板或者数据发生变化 还是要改来改去的 所以本文就在基础
  • 华为OD机试 -表示数字(C++ & Java & JS & Python)

    描述 将一个字符串中所有的整数前后加上符号 其他字符保持不变 连续的数字视为一个整数 数据范围 字符串长度满足 1 100 1 n 100 输入描述 输入一个字符串 输出描述 字符中所有出现的数字前后加上符号 其他字符保持不变 示例1 输入
  • 如何使用 Python 从单词创建首字母缩略词

    在编程和数据处理中 首字母缩略词是句子的缩写版本 Python 是一种有效的语言 用于构造首字母缩略词 简化任务和简单地传达更大的句子 本课展示了如何使用 Python 及其一些潜在的应用程序从单词中制作首字母缩略词 算法 您需要安装任何其
  • 2023前端最新【JavaScript面试题】高频30问

    JavaScript是一种轻量级的编程语言 常被用于网页开发中 它是一种解释型语言 常常被用于实现前端逻辑 在Javascript的面试中 以下是一些常见的问题 1 Javascript的数据类型有哪些 Javascript有七种数据类型
  • 蓝桥杯-2021省赛第一场(部分)

    试题B 卡片 本题总分 5 分 问题描述 小蓝有很多数字卡片 每张卡片上都是数字 0 到 9 小蓝准备用这些卡片来拼一些数 他想从 1 开始拼出正整数 每拼一个 就保存起来 卡片就不能用来拼其它数了 小蓝想知道自己能从 1 拼到多少 例如
  • rj45接口引脚定义_RJ45插座工作原理及接口定义分析

    rj45插座工作原理分析 rj45插座滤波器中poe的工作原理是透过 局域网 网络线提供access point 无线接取点 工作所需之电源 并不需要单独连接电源线缆的全新供电方式 现许多企业已开始应用rj45插座滤波器中poe来降低组建无
  • onTaskRemoved() not getting called in HUAWEI and XIOMI devices

    http stackoverflow com questions 40660216 ontaskremoved not getting called in huawei and xiomi devices 20 down vote favo
  • 持仓盈亏公式

    添加持仓盈亏 卖出数量必须小于等于持仓量 卖出买入数量必须是100的整数倍数且大于0 当前价不影响 摊博成本 持仓成本 持有量 买入价 买入数量 卖出价 卖出数量 都是当前添加数据进行计算 持仓成本 买入价 买入数量 买入价 买入数量 列表
  • Linux关于memory cgroup的几个要点

    概述 本文讲述memory cgroup比较容易误解的一些逻辑 如果不太经常使用和解决问题的话 对于memory cgroup的认知会比较浅显 cgroup memory用来限制进程的内存使用 但是我们进一步想如下的问题 进程的内存可以分很
  • java-layui下载单个或多个文件

    首先设置使用的浏览器 允许同时下载多个文件 这个可以在下载的时候有的浏览器会弹出提示框是否允许下载多文件 有的不弹或者默认禁止的 需要手动设置 这个根据使用的浏览器 自行百度设置即可 代码未用到实际项目中 写的比较杂乱 测试可用后根据自己的
  • 无线网dns服务器设置错误,DNS错误怎么办(如何正确设置DNS)

    篇一 dns错误怎么办 dns错误的解决办法 dns错误怎么办 dns错误的解决办法 不知道大家有没有遇到过输入网址打开之后出现网页打不开 提示dns错误的情况 笔者以前遇到不少类似的情况 不过多数是由于以下原则造成的 今天笔者也接到电脑百
  • 使用Git将项目上传到gitlab详解(windows)

    1 首先你需要在gitlab上面创建一个仓库 拿到该仓库地址 2 具体操作步骤 在windows上面在要上传的目录下打开git bash windows版git需要安装 自行安装 进行git初始化 git init 将项目的所有文件添加到仓
  • java将m3u8转成视频文件

    这是一次尝试 android手机将在线的m3u8小电影保存到手机端 手机端把文件复制到电脑端 然后使用小工具合并成可播放的视频 合并视频文件 public class MergeVideos source为源地址 destination为合
  • JAVA与RFID,技术改变世界

    Sun Java系统RFID软件已经发布 并做出了若干重要改进 与SAP Auto ID架构集成 与Java 综合应用平台套件 Java Composite Application Platform Suite 集成 支持JAVA平台 微版
  • linux解决Tomcat内存溢出

    Tomcat本身不能直接在计算机上运行 需要依赖于操作系统和一个JAVA 虚拟机 JAVA程序启动时JVM会分配一个初始内存和最大内存给程序 当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出 并且导致应用服务崩溃 一 常见的 Jav