我的系统面临与内存不足 (OOM) 错误相关的问题。在这种情况下,Linux 的 oom kill 实用程序会使用特定算法杀死一个进程(称为“坏进程”)以释放空间。我想在这种情况发生之前打印内存,处理统计信息。
mm/oom_kill.c 包含函数 out_of_memory()。我想在这个函数继续杀死“坏进程”之前打印我的统计数据。为此,我编写了以下 bash 脚本
#!/bin/bash
# Script to print process related info
echo "Vmstat " > OOM_memresults
vmstat >> OOM_memresults
echo >> OOM_memresults
echo "SLABINFO" >> OOM_memresults
cat /proc/slabinfo >> OOM_memresults
echo >> OOM_memresults
echo "Status of process getting killed" >> OOM_memresults
cat /proc/$1/status >> OOM_memresults
现在我面临的问题是找到一种从内核代码调用这个脚本的方法。
我不能使用 system("scriptname") 因为系统函数在 linux 内核中不可用,我们也不能使用 exec 及其变体。
任何想法如何从内核代码中调用此脚本或任何其他方式我可以随时从内核代码中打印进程、内存相关信息。“当前”函数提供有关当前正在运行的进程及其 task_struct 的信息,但很难从中提取任何有用的信息。