Перегрузка памяти C++ в Linux

В настоящее время я кодирую серверное приложение, которое в основном обрабатывает рабочие нагрузки для клиентов. Исходя из реальной рабочей нагрузки, сервер может использовать огромные объемы памяти. Целевые платформы — Windows и Linux, код написан на c++.

Тем не менее, я не очень хорошо знаком с программированием для Linux, и сегодня во время некоторых тестов я столкнулся с некоторыми странными сбоями. Как оказалось, они были связаны с чрезмерной памятью.

Код, который я написал, довольно надежен и может обрабатывать ситуации нехватки памяти (по крайней мере, в системах Windows), разделяя и ставя в очередь свои рабочие нагрузки всякий раз, когда он сталкивается с исключениями bad_alloc. Рефакторинг всего кода, чтобы справиться с ошибками, которые могут возникнуть из-за перераспределенной памяти, был бы полным кошмаром.

Итак, мне было интересно, могу ли я отключить overcommit для моего процесса и дочерних потоков. Я уже нашел здесь старый вопрос Ссылка (в stackoverflow), который отвечает на это как нет, но, понимая, что это ответ 10-летней давности, мне было интересно, могло ли это измениться?

Если по-прежнему невозможно изменить это приложение, есть ли хотя бы способ определить текущую настройку для него внутри моего приложения?

Заранее спасибо!

1 ответ

Итак, мне было интересно, могу ли я отключить overcommit для моего процесса и дочерних потоков. Я уже нашел здесь старый вопрос Ссылка (в stackoverflow), который отвечает на это как нет, но, понимая, что это ответ 10-летней давности, мне было интересно, могло ли это измениться?

Нет, вы по-прежнему не можете изменить настройки overcommit для каждого процесса. Это общесистемная настройка. Его можно изменить только с правами суперпользователя.

есть ли хотя бы способ определить текущую настройку

Вы можете прочитать его из псевдофайловой системы /proc. В частности, файл /proc/sys/vm/overcommit_memory.

Другие вопросы по тегам