欢迎各位兄弟 发布技术文章
这里的技术是共享的
linux 当看到 /var/log/messages 有 Out of memory 时 Dec 4 22:37:24 ebs-22618 kernel: Out of memory: Kill process 3593 (httpd) score 13 or sacrifice child 查看此时的内存使用情况
当你在 Linux 系统日志 /var/log/messages
中看到类似 Out of memory: Kill process 3593 (httpd) score 13 or sacrifice child
的消息时,这表示系统内存不足,内核已经决定杀死一个或多个进程以释放内存。在这种情况下,你可以使用以下命令来查看当前的内存使用情况:
free 命令:
bash复制代码
free -h
这个命令会显示系统中内存的使用情况,包括已用、空闲、交换分区等信息,-h
选项表示以人类可读的格式显示(例如,MB、GB)。
top 命令:
bash复制代码
top
top
命令提供了一个动态的实时视图,显示系统中各个进程的内存和CPU使用情况。你可以按 M
键来按内存使用量排序进程。
htop 命令(如果已安装):
bash复制代码
htop
htop
是 top
命令的一个更友好的替代,提供了更直观的用户界面和更多的功能。同样,你可以通过按 F6
键(或 Shift + >
)然后按 M
来按内存使用量排序进程。
vmstat 命令:
bash复制代码
vmstat 1
vmstat
命令提供了关于系统性能的详细信息,包括内存、分页、块IO、陷阱、进程和CPU活动等。1
表示每秒刷新一次输出。
cat /proc/meminfo:
bash复制代码
cat /proc/meminfo
这个命令会显示关于内存使用的详细信息,包括内存总量、已用内存、空闲内存、缓存和缓冲区等。
smem 命令(如果已安装):
bash复制代码
smem -s rss= -k
smem
命令提供了关于内存使用的更详细的分析,包括共享内存、私有内存等。-s rss=
选项表示按常驻集大小(RSS)排序,-k
选项表示以KB为单位显示。
通过这些命令,你可以获得系统当前的内存使用情况,并找出哪些进程占用了最多的内存。这有助于你理解为什么会出现内存不足的情况,并采取相应的措施,如增加物理内存、优化应用程序的内存使用、或增加交换分区的大小等。
能够查看占内存消耗的前5个进程吗
是的,你可以查看内存消耗最多的前5个进程。在Linux系统中,有几个命令可以帮助你实现这一点。以下是一些常用的方法:
使用 ps
命令结合 sort
和 head
:
bash复制代码ps auxw --sort=-%mem | head -n 6
这里的 ps
auxw
会列出所有用户的所有进程,--sort=-%mem
会按内存使用量降序排序,head -n 6
则会显示前6行(包括表头)。因此,你需要忽略第一行表头,剩下的5行就是内存消耗最多的前5个进程。
使用 top
命令:
在 top
命令的输出中,你可以按 M
键来按内存使用量排序进程。虽然 top
是动态的,但你可以截图或手动记录前5个进程的信息。
使用 htop
命令(如果已安装):
htop
提供了更友好的界面。启动 htop
后,你可以按 F6
(或 Shift + >
)键,然后选择 %MEM
来按内存使用量排序进程。
使用 smem
命令(如果已安装):
smem
命令可以显示更详细的内存使用情况,包括共享和私有内存。你可以使用以下命令来按内存使用量排序进程,并显示前5个:
bash复制代码smem --pid -k -r rss | head -n 6
这里的 --pid
选项显示进程ID,-k
选项以KB为单位显示,-r rss
选项按常驻集大小(RSS)排序,head -n 6
则显示前6行。
请注意,由于进程是动态变化的,所以你需要在实际需要查看内存使用情况的时候运行这些命令。此外,不同的命令可能会显示略有不同的内存使用量,因为它们计算的内存类型(如RSS、PSS、虚拟内存等)和方式可能有所不同。