| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > точный мониторинг состояния процесса. |
| Автор: boostcoder 23.10.2011, 11:35 | ||
| всем доброго утра. заранее предупреждаю, что в системном программировании я на знаток, посему прошу не придираться к неправильным формулировкам. просто поправьте. спасибо. нужен монитор указанного процесса с частотой замеров от 1 мс и выше. если есть возможность выполнять выборки чаще чем 1 мс - то это еще лучше. так же, нужна возможность создавать график в виде графического файла, или чего-либо что можно визуализировать. конкретно интересует мониторинг следующих значений: 1. пользовательское время. 2. системное время(время ядра?). 3. время проведенное в ожидании. 4. по пункту 3, нужна информация о том, в ожидании чего. (есть ли возможность узнать, висел ли процесс на мьтексах/файловом_IO/сетевом_IO ?) 5. память процесса. т.к. ничего готового не нашел, придется кодить руками. первый вопрос: с какой частотой обновляется /proc/pid/stat ? как определить эту частоту? насколько я понял, состояние процесса описывает структура http://lxr.linux.no/linux+v3.0.4/include/linux/sched.h#L1220. возможно, если в /proc/pid/stat информация обновляется с недостаточной частотой, то возможно ли получить эту структуру прям из ядра с большей частотой? понятно, что нужен модуль ядра. второй вопрос: согласно "man 5 proc", пользовательское время, это поле utime, а системное время это stime?
еще не очень понятно назначение cutime и cstime. cutime - это суммарное время в режиме пользователя для текущего процесса и его потоков? или кто такие в данном случае могут быть "его потомки"? cstime - тут вообще не понятно. это значение времени именно ожидания завершения потомков? т.е. основной процесс пытается завершиться, но не может из-за потомков, и ждет их? т.е. это именно об этом хотят сказать? и это ни то же самое что и "3. время проведенное в ожидании." ? и скажите, есть ли возможность согласно пункту 4(нужна информация о том, в ожидании чего. (есть ли возможность узнать, висел ли процесс на мьтексах/файловом_IO/сетевом_IO ?)) получить информацию? задайте направление, пожалуйста. спасибо. |
| Автор: boostcoder 23.10.2011, 15:01 | ||||||
дело в том, что я закодил такой тест:
если его выполнить, то в выводе видно, что обновленные данные поступают не постоянно. такое ощущение, что несколько выборок получают реальные данные, остальные же, выводят последний полученный результат.
если эта тулза-монитор выполняющаяся отдельным процессом что-то там и будет "кушать", то главное чтоб на замеряемом процессе это не сказалось. и по идее вроде как не должно. |
| Автор: boostcoder 23.10.2011, 15:27 | ||
а нет, это я тестировал на процессе который имеет импульсную нагрузку. значит все же данные поступают равномерно. вернее не поступают, а обновляются. |
| Автор: rumit7 23.10.2011, 19:32 | ||
Здравствуйте! Вроде http://stackoverflow.com/questions/63166/how-to-determine-cpu-and-memory-consumption-from-inside-a-process есть немного, может пригодится.. |
| Автор: MAKCim 23.10.2011, 19:37 | ||
кэширования тут нет значит так ядро обновляет |
| Автор: boostcoder 23.10.2011, 21:40 |
спасибо! то что нужно! |
| Автор: boostcoder 24.10.2011, 14:36 | ||
кто-нибудь подскажет по следующим пунктам?
|
| Автор: xvr 25.10.2011, 13:15 |
| По п4 родной ps смотрит на адрес ожидания в ядре (это где то есть в /proc/...) и на символы ядра (если найдет). По ним находит имя функции ядра, где висит процесс. А дальше руками |
| Автор: boostcoder 25.10.2011, 16:51 |
адрес чего? функции? ну допустим, ps таким образом узнает адрес. но как ps по адресу узнает имя функции? а что нужно сделать, чтоб получить более детальную информацию? а это что такое? |
| Автор: xvr 26.10.2011, 13:01 | ||
Посмотреть исходники ps Ну это например /boot/System.map-* (или прямо nm на /boot/vmlinux-* ) |
| Автор: boostcoder 26.10.2011, 13:29 |
уже смотрю. спасибо. вот теперь понял. спасибо еще раз. буду ковыряться. |