|
Как получить загрузку CPU в % программно?
|
|||
---|---|---|---|
#18+
Обнаружил что прога (телефония) при большой нагрузке (много параллельных процессов) может скрашить. Устойчивость достаточно хорошая но все же. Конкретные причины искать тяжело (если не сказать малореально), хотя ищу по возможности. Как-то это зависит от нагрузки на процессор. Хочу придать больше устойчивости. В библиотеке есть таймеры Обычно thread->WaitForTermination(10000) 'если 10 сек нет ответа -> генерировать краш По совету одного человека сделал thread->WaitForTermination(100000) 'до 100сек но это мало помогает, либо если бобик сдох, то все равно сдох, либо причина в другом. Что я хочу попытаться сделать (хотя б для теста). Пассивные процессы (статистика и т.п.) -здесь я бессилен. Активные процессы - могу сделать отсрочку на запуск нового процесса. Хочу попробовать вычислить CPU Usage и если превосходит планку то от запуска временно воздержаться. То что в диспетчере задач. Реально? Как? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 22:15 |
|
Как получить загрузку CPU в % программно?
|
|||
---|---|---|---|
#18+
Дмитрий77, Пример для Excel, а дальше адаптируйте под себя. Вот здесь можно узнать больше. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2013, 00:52 |
|
Как получить загрузку CPU в % программно?
|
|||
---|---|---|---|
#18+
lbppb, WMI на мой взгляд не надежно (по опыту с модемами и портами) - и без его знает сколько оно само ресурсов расходует. Я вот так сделал: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Ну, в моем случае ограничение 20% вроде как помогает, ограничивая излишнюю активность и перераспределяя ее во времени. Таймер 300мс -если зашкалит, то "новое действо" отменяется до след. таймера, само "действо" создает максимальную нагрузку естественно в первый момент (запуск процесса, запрос-запись в БД и т.п.), поэтому отказоустойчивости это дело способствует. Вопрос только в том какую величину вычислять для сравнения с критерием и сколько % брать за критерий. Сами процессы (тел. звонки) много не просят, основная энергия идет на установление соединения и запись всяких логов с пиком в начале и конце вызова. На конец я влиять не могу, а вот на начало очень даже. Т.е. напр. 50 одновременных вызовов (разрешенный тест максимум кот. проходит по логике теста по времени бы прошел - по 25 сек каждый вызов, и инициализация не чаще чем (+/-300мс (таймер VB)) +( +/-500 мс(таймер C++)) на моем компе не тянут. Ограничение 30% CPU сбрасывает в район 40 вызовов, при этом таки есть вероятность (но уже малая) краша. Ограничение же в 20% CPU сбрасывает в район 35 вызовов но при этом краш уже считай исключен. Причем планку 20% скорее всего можно поднять, а сбои происходят из-за случайных скачков (50%-10%-80%) - я беру CPU по соседним точкам 300мс, и в 10% я напр. "бабахнул". М.б. имеет смысл интерполировать-усреднять по скажем 10 предыдущим значениям(или даже по большему количеству -понятно что такие нагрузки на игровом компе не запускают и интерполяция скажем по 100-200 точкам (30-60сек) уже покажет среднюю нагрузку, кот. например превышать не надо)? Но сильных вычислений каждый раз тоже ясно дело не хотелось бы. Есть идеи? Я на всякий случай тест-проект приложил. Да и как быть с двух- трех- процессорностью? У меня 2 процессора, но без "контроля" может приближаться к 100%. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2013, 01:52 |
|
|
start [/forum/topic.php?fid=60&fpage=52&tid=2156731]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 135ms |
0 / 0 |