Я думаю, что мой предмет является довольно точечным на. Я нахожусь на Ubuntu 10.04 на устройстве со следующими спецификациями:
Я выполняю 10 пользователей одновременно как виртуальные компьютеры (терминалы) от NComputing.
Я использую вокруг макс. 8 - 10 ГБ Памяти, когда компьютер работает в самом полном. У меня есть следующие приложения, которые все эти 10 пользователей используют одновременно:
Около 8:00 - 15:00, мой компьютер (на самом деле сервер) работает абсолютно прекрасный, затем около 15:00 - 15:30 после отъезда, компьютер просто не замораживается ни по какой причине, не давая предупреждения. Я должен вызвать компьютер питанием, не может даже использовать кнопку сброса.
Мне сказали от людей аппаратных средств/программного обеспечения NComputing, что я должен сделать дамп памяти всех завершенных процессов для каждого пользователя, который работает - который будет 10 пользователями.
Как я делаю это, освобождая дампы памяти, и я должен даже испытать что-нибудь как это на таких мощных аппаратных средствах?
Одно решение из-за на ServerFault прямая кавычка :
я сделал сценарий, который выполняет эту задачу.
коммунисты идеи из ответа James Lawrie и этого сообщения: http://www.linuxforums.org/forum/programming-scripting/52375-reading-memory-other-processes.html#post287195
#!/bin/bash
grep rw-p /proc/$1/maps | sed -n 's/^\([0-9a-f]*\)-\([0-9a-f]*\) .*$/\1 \2/p' | while read start stop; do gdb --batch --pid $1 -ex "dump memory $1-$start-$stop.dump 0x$start 0x$stop"; done
помещает это в файл (например, "dump-all-memory-of-pid.sh") и делает его исполняемым файлом
использование: ./dump-all-memory-of-pid.sh [pid]
вывод печатается в файлы с именами: pid-startaddress-stopaddress.dump
Зависимости: gdb
кавычка
конца единственной вещью добавить является цикл для итерации по всему PIDs.