Сбой службы Linux - PullRequest
       22

Сбой службы Linux

1 голос
/ 18 октября 2011

У меня есть служба linux (c ++, с множеством загружаемых модулей, в основном .so файлов, подхваченных во время выполнения), которая время от времени дает сбой ... Я хотел бы разобраться в этом сбое и изучить его, однако намомент, когда я понятия не имею, как поступить.Итак, я хотел бы спросить вас следующее:

  1. В случае сбоя службы Linux, где создается файл «core»?Я установил ulimit -c 102400, этого должно быть достаточно, однако я нигде не могу найти файлы ядра: (.
  2. Есть ли какие-либо журналы Linux, которые отслеживают службы? Собственный журнал служб, очевидно, не говорит мне, чтоЯ сейчас потерплю крах ...
  3. Возможно, один из модулей выходит из строя ... однако я не могу сказать, какой из них. Я даже не могу сказать, какие модули загружены. Знаете ли вы, какпокажите в linux, какие модули использует служба?
  4. Любые другие советы, которые могут у вас возникнуть при отладке службы linux?

Спасибо f-

Ответы [ 3 ]

2 голосов
/ 20 октября 2011

В Linux процессы, которые переключают ID пользователя, отключают свои основные файлы из соображений безопасности.Это потому, что они часто делают такие вещи, как чтение привилегированных файлов (например, / etc / shadow), а файл ядра может содержать конфиденциальную информацию.

Чтобы включить дамп ядра для процессов, которые переключили идентификатор пользователя, вы можете использовать prctl сPR_SET_DUMPABLE.

Базовые файлы обычно выгружаются в текущий рабочий каталог - если это не доступно для записи текущему пользователю, то произойдет сбой.Убедитесь, что текущий рабочий каталог процесса доступен для записи.

2 голосов
/ 18 октября 2011

0) Создайте промежуточную среду, максимально имитирующую производство.Воспроизведите проблему там.

1) Вы можете присоединиться к запущенному процессу, используя gdb -a (конечно, нужна отладочная сборка)

2) Убедитесь, что ulimit - это то, что вы думаетеэто так (выводите ulimit в файл из сценария оболочки, который запускает ваш сервис непосредственно перед его запуском).Обычно вам нужно установить ulimit в файле / etc / profile;установите его ulimit -c 0 на неограниченное количество

3) Найдите основной файл, используя find / -name \*core\* -print или аналогичный

4) Я думаю, что GDB выдаст вам список загруженных общих объектов (.so), когдавы присоединяетесь к процессу.

5) Добавить больше регистрации к вашим услугам

Удачи!

0 голосов
/ 19 октября 2011

Ваш первый заказ должен получить основной файл. Посмотрите, применяется ли этот ответ .

Во-вторых, вы должны запустить свой сервер под Valgrind и исправить все найденные ошибки.

Воспроизведение сбоя при работе под GDB (как предложил MK) возможно, но несколько нелицеприятно: ошибки обычно скрываются, когда вы их ищете, и отладчик может влиять на синхронизацию (особенно если ваш сервер многопоточный).

...