Проверка использования стека процесса в Linux - PullRequest
0 голосов
/ 03 июля 2018

Я использую версию 3.12.10 Linux. Я пишу простой модуль, который просматривает список задач и проверяет использование стека каждым процессом, чтобы определить, не угрожает ли какой-либо из них переполнением стека. Чтобы получить ограничение стека процесса, который я использую:

tsk->signal->rlim[ RLIMIT_STACK ].rlim_cur

Чтобы получить адрес памяти для начала стека, я использую:

tsk->mm->start_stack

Затем я вычитаю из него результат этого макроса:

KSTK_ESP( tsk )

В большинстве случаев это работает нормально, но иногда возникает ситуация, когда процесс использует больше своего предела стека (обычно 8 МБ), но процесс продолжает работать, а сам Linux не сообщает о каких-либо выпуск.

У меня вопрос: я использую правильные переменные для проверки использования этого стека?

1 Ответ

0 голосов
/ 12 июля 2018

Проведя дополнительные исследования, я понял, что это не очень хороший способ определить, сколько стека было использовано. Проблема возникает, когда ядро ​​выделяет больше стека памяти для стека для этого процесса. Эти страницы не могут быть смежными с другими страницами. Таким образом, указатель текущего стека может быть некоторым значением, которое приведет к неверному вычислению.

Значение в task-> mm-> stack_vm можно использовать для определения того, сколько места фактически было выделено для стека процесса. Это не так точно, как то, сколько фактически используется, но для моего использования достаточно хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...