我在系统上遇到与内存不足(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的信息,但很难从中提取任何有用的信息。