Як я можу дізнатися, чи пов'язаний процес до процесора, пам'яті чи диска?
Як я можу дізнатися, чи пов'язаний процес до процесора, пам'яті чи диска?
Відповіді:
Для цього потрібне певне вуду. Це залежить. Приклад:
Якщо пам'яті достатньо, а диски не здаються надто зайнятими, можливо , це пов'язано з процесором. Подивіться на використання процесора, і якщо його межа на 100%, це пов'язано з процесором. Якщо це не так, у реалізації є штучне вузьке місце. Наприклад, у двоядерному процесорі процес однопотокової передачі не перевищує 50% використання процесора.
Якщо процесор і пам'ять доступні, але диски дуже зайняті, або затримка введення-виводу здається високою, швидше за все, його введення-виведення пов'язане. Перевірте, чи допомагає додавання більше дисків (RAID?)
Жодні з вищезазначених? Перевірте наявність пам'яті.
Досить пам'яті? У самому процесі може виникнути штучне вузьке місце, тобто, можливо, хтось забув зняти сон (1)? Ні, звичайно, це не так просто. ;)
Є причина, чому у більшості компаній, що займаються продуктами, що відрізняються ефективністю, у нас є ціла лабораторія для інженерів продуктивності!
Використовуйте такі інструменти, як sar, vmstat, iostat, oprofile, lockstat, dtrace, специфічні для продукту інструменти моніторингу перф і т.д., для налагодження проблем з перф.
перевірити iotop
, може бути корисним
Як і інші згадані інструменти, запустіть ps l PID
, вставивши відповідний ідентифікатор процесу або подивіться на ДЕРЖАВНІ та WCHAN стовпці вгорі або вгорі.
Якщо він знаходиться в D (для диска) стані, він робить файл IO. Це може бути тому, що це читання численних файлів, або тому, що він використовує багато пам’яті та обмінюється. Стовпець WCHAN повідомить вам, яка функція ядра знаходиться всередині; гуглити до них або запитати тут, можливо, дадуть вам певну інформацію про те, що вони означають.
Якщо він знаходиться в стані R (run), він використовує процесор у просторі користувача, іншими словами, він пов'язаний з процесором на той момент.
Якщо він знаходиться в стані S (сон), він знаходиться всередині переривного системного дзвінка, що може означати, що він насправді спить, або робить щось на кшталт очікування мережевого трафіку або блокування. Знову ж таки, дивлячись на конкретного wchan, ви розповімо більше.
Дивіться також Що таке "канал очікування" процесу?