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 |
|
|
|
|
|
|
|
|
|
|
|
|
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排行