Linux数据库服务器物理内存和虚拟内存满了怎么排查和解决?

Linux数据库服务器物理内存和虚拟内存满了怎么排查和解决?,第1张

一、查看物理内存

执行如下命令即可查看物理内存,执行效果如下图所示:

dmidecode -t memory | grep Size

二、配置空间

物理内存是没办法配置的,只能配置虚拟内存,在Linux系统即Swap分区。具体操作swap分区的方法如下:

1. 存储器接收传真满MESSAGE ALERT设置留言报警MEMORY FULL存储器接收传真满2. 存储器已满扫描多页文档时,液晶显示屏上可能出现[存储器已满(MEMORY FULL)],正在扫描的文档停止在自动输稿器(ADF)中。在此情况下,减少要扫描的文档。3. 内存已满...复印的文档包含大量图形或照片,而图像质量模式设为[文本(TEXT)]之外的其他模式,则液晶显示屏上将会显示[内存已满(MEMORY FULL)],并且复印将被取消。如果出现这种情况,请将图像质量模式更改为[文本(TEXT)]。4. 内存已被全部占用Key column is outside of sort range 排序键在序区域之外Memory full 内存已被全部占用

1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出

JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。

可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young GenerationTenured Generaion之和。

在JVM中如果98%的时间是用于GC,且可用的Heap size不足2%的时候将抛出此异常信息。

解决方法:手动设置JVM Heap(堆)的大小。  

 

2. java.lang.OutOfMemoryError: PermGen space  ---- PermGen space溢出。 

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。

为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen space溢出。

解决方法: 手动设置MaxPermSize大小

3. java.lang.StackOverflowError   ---- 栈溢出

栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的。函数的调用过程都体现在堆栈和退栈上了。

调用构造函数的 “层”太多了,以致于把栈区溢出了。

通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间。通常栈的大小是1-2MB的。

通常递归也不要递归的层次过多,很容易溢出。

解决方法:修改程序。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/615380.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-14
下一篇2023-07-14

发表评论

登录后才能评论

评论列表(0条)

    保存