操作系统 / linux
OOM -kill
今天分享一个操作系统的点 就是内存的oom-kill
场景是:
我们的多个java进程或者多个其他进程原来越多。
把操作系统内存挤满的时候。
这时候操作系统出于保护机制会kill掉内存占用最大的进程。
这种就是 oom-killer
我们借这个机会理一下基本概念:
什么是操作系统的内存
内存是计算机中用于存储程序、数据和操作系统本身所需信息的关键资源。
操作系统的内存具有以下几个方面的功能:
**内存管理:**操作系统负责管理计算机系统中的物理内存和虚拟内存。它跟踪哪些内存位置是空闲的,哪些是已被占用的。内存管理器分配和回收内存,以满足应用程序和操作系统的内存需求。
虚拟内存:操作系统使用虚拟内存技术将物理内存与逻辑地址空间进行映射。它允许每个进程拥有独立的地址空间,并将进程所需的内存页面映射到物理内存或磁盘上的页面文件中。
内存保护:操作系统通过内存保护机制确保不同进程之间的内存空间互相隔离,防止一个进程访问或修改其他进程的内存内容。
内存分页:操作系统使用分页机制将内存划分为固定大小的页(通常是4KB或8KB),以便更高效地管理内存分配和页面置换。
内存缓存:操作系统使用内存缓存来存储经常访问的数据和指令,以提高系统性能。缓存减少了对慢速存储(如硬盘)的访问次数,从而加快数据的读取和写入速度。
内存交换:当系统内存不足时,操作系统可以将部分不活动的内存页面交换到硬盘上的交换空间,以释放物理内存供其他进程使用。
为什么进程运行需要占用内存
任何进程想要运行 都需要内存这种计算机的关键资源,java也不例外,
这也就是为什么jvm要配置默认的内存大小。
怎么排查OOM-killer
如果发生OOM-killer,那么用
ps -ef| grep java
top
这些命令是没用的,因为进程都没了 什么都查不到
这时候需要到 linux的系统日志里面:
/var/log
在这两个文件夹中 查询相关oom-kill的信息:
在大多数 Linux 发行版中,OOM Killer(Out of Memory Killer)的相关信息通常记录在系统日志文件中,最常见的日志文件是 /var/log/messages 或 /var/log/syslog。这些文件记录了系统级别的消息和事件。
你可以使用以下方法查找和分析 OOM Killer 的相关信息:
使用 cat 命令或者 less 命令来查看日志文件的内容。例如:
bash
Copy code
cat /var/log/messages
或
bash
Copy code
less /var/log/syslog
根据你的系统和日志文件的位置选择相应的命令。
使用 grep 命令过滤出与 OOM 相关的信息。例如,可以使用以下命令来查找包含 "oom" 或 "out of memory" 的行:
perl
Copy code
grep -i "oom\|out of memory" /var/log/messages
或
perl
Copy code
grep -i "oom\|out of memory" /var/log/syslog