Два вопроса:
Есть ли какой-нибудь способ отключить подкачку для данного процесса, то есть возможно ли убить определенный процесс, если он использует всю доступную основную память системы?
Как мне деактивировать избыточную память в системе Linux?
контекст :
Я запускаю распределенное приложение, и мне бы хотелось, чтобы процесс был убит, когда в системе не хватило основной памяти. Процесс довольно сложен для связи с жестким диском, для чего я считаю разумным проверить использование памяти программно , лайк:
std::ifstream statm("/proc/self/statm");
size_t mem_virt, mem_rss, mem_shared;
statm >> mem_virt >> mem_rss >> mem_shared;
if (mem_virt == MAX_SYSTEM_PRIMARY_MEMORY) {
// kills current process
}
Но если бы был какой-то набор командных строк, способных отключить обмен для данного процесса, это было бы определенно лучше.
Тем не менее, я до сих пор не знаю, как отключить сверхкоммит. Есть идеи?
источник
vm.overcommit_ratio=0
как и выше, вы ограничиваете общее выделение памяти размером только подкачки. Я попробовал вышеизложенное и попал в состояние, в котором ничего не может работать, так как все распределения не удаются. Я предполагаю, что система уже использовала больше памяти, чем размер подкачки. Четноеls
дает-bash: fork: Cannot allocate memory
, Я думаю, что вы хотели установить процент до 100, нет?