oracle ora-27102:out of memory 错误解决办法(简单粗暴,100%能解决内存占用问题)
-前置:
当遇到这个问题,笔者也是一脸的茫然,然后就是查资料,在笔者查阅了很多相关资料后发现什么优化、配置sysctl.conf内存最大最小值后发现也都没啥太大的作用(笔者的/etc/sysctl.conf已经配置与内存同样大小),最终还是通过比较简单粗暴的方式将问题解决,直接结束现有进程。
-原因:
由于linux下运行的进程占用物理内存过多,虚拟内存过大,虚拟内存不释放导致内存不足,这是问题的根本!
-那么,怎么解决?
linux系统:
解决:
1.查看linux进程内存占用情况:
(1)使用top命令:$ top -u oracle 或 top -10
2.筛选结果(如结果显示pid为144524的java进程占用了1.9g的物理内存):
pid | user | pr | ni | virt | res | shr | s | %cpu | %mem | time+ | command |
---|---|---|---|---|---|---|---|---|---|---|---|
3440 | root | 20 | 0 | 132m | 27m | 1056 | s | 7.3 | 0.1 | 1511:06 | phdaemon |
102435 | root | 20 | 0 | 15428 | 1724 | 948 | r | 0.7 | 0.0 | 0:00.04 | top |
144524 | root | 20 | 0 | 15.2g | 1.9g | 7156 | s | 0.7 | 6.1 | 9:17.07 | java |
2277 | root | 20 | 0 | 15.2g | 1.6g | 13m | s | 0.3 | 5.2 | 2:02.41 | java |
9312 | root | 20 | 0 | 102m | 2168 | 992 | s | 0.3 | 0.0 | 2:52.20 | oraysl |
… | … | … | … | … | … | … | … | … | … | … | … |
3.根据pid结束进程命令:
(1)如果不想结束整个java进程,还可以使用ps命令:$ ps -ef|grep java
(2)找到可以结束的进程pid,在使用kill命令:$ kill -9 144524
(3)直到再次登录。
内容解释:
pid:进程的id
user:进程所有者
pr:进程的优先级别,越小越优先被执行
ninice:值
virt:进程占用的虚拟内存
res:进程占用的物理内存
shr:进程使用的共享内存
s:进程的状态。s表示休眠,r表示正在运行,z表示僵死状态,n表示该进程优先值为负数
%cpu:进程占用cpu的使用率
%mem:进程使用的物理内存和总内存的百分比
time+:该进程启动后占用的总的cpu时间,即占用cpu使用时间的累加值。
command:进程启动命令名称
常用命令:
p:按%cpu使用率排行
t:按mite+排行
m:按%mem排行