Russian Qt Forum
Ноябрь 23, 2024, 10:12
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Установка, сборка, отладка, тестирование
>
99% загрузка времени ЦП программой
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: 99% загрузка времени ЦП программой (Прочитано 4157 раз)
titan83
Гость
99% загрузка времени ЦП программой
«
:
Апрель 04, 2014, 07:11 »
Здравствуйте.
Написал я тут программку на Qt 4.8 для встраиваемой системы. Программа должна работать 24/7/365.
Сейчас наблюдаю такую неприятную картину - через 2-3 дня использования начинает ступенчато расти загрузка процессора, растет с 10% (штатный режим) до 99% и там и остается. В результате все адски тормозит, и хрен бы с ним только графический интерфейс, но и коммуникационный обмен тоже в опе(
Программка большую часть времени читает-пишет в ком-порты (QtSerialPort), и гораздо реже пишет в файлы.
git'ом пользовался крайне нерегулярно((( сам дурак.
Вопрос - как можно провести профилирование и понять, что именно вызывает это крайне нежелательное поведение?
Спасибо.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: 99% загрузка времени ЦП программой
«
Ответ #1 :
Апрель 04, 2014, 10:09 »
Проблем может быть несколько:
- генерация большого кол-ва событий, которые не успевают обрабатываться.
- забытый таймер.
Поймать можно под отладчиком - периодически останавливаь и смотреть backtrace stack либо через callgrind.
Записан
Qt 5.11/4.8.7 (X11/Win)
titan83
Гость
Re: 99% загрузка времени ЦП программой
«
Ответ #2 :
Апрель 08, 2014, 14:29 »
Спасибо за ваш комментарий.
Хотел уточнить - генерация большого кол-ва событий, которые не успевают обрабатываться.
Я так думаю, что два-три события в секунду не являются большим количеством? Сейчас наконец-то могу посмотреть динамику: загрузка процессора моей программой растет на 9-10% в час.
Буду по очереди отключать различные секции и смотреть на результат.
Записан
Bepec
Гость
Re: 99% загрузка времени ЦП программой
«
Ответ #3 :
Апрель 08, 2014, 14:35 »
Встраиваемые системы обычно имеют свои неприятные ограничения.
Записан
titan83
Гость
Re: 99% загрузка времени ЦП программой
«
Ответ #4 :
Апрель 14, 2014, 10:15 »
Может кому-нибудь поможет, но разобрался я в своей проблеме.
В общем все дело было в файловых операциях.
Я пытался эмулировать syslog примерно такой конструкцией:
systemLogFile.setFileName(SYSTEM_LOG_FILE + QDate::currentDate().toString());
if (systemLogFile.open(QIODevice::Append))
{
systemStreamLog.setDevice(&systemLogFile);
}
else
{
return;
}
systemStreamLog << QDateTime::currentDateTime().toString("yyyy:MM:dd - hh:mm:ss ").toLocal8Bit();
systemStreamLog << " - ";
systemStreamLog << record;
systemStreamLog << "\r\n";
systemLogFile.flush();
if (systemLogFile.isOpen())
{
systemLogFile.close();
}
Т.е. открывал файл на запись в конец, записывал и закрывал. Все это делалось довольно часто (3-4 раза в секунду), небольшими порциями (около 100 байт) и на MicroSD карту.
В результате я имел постоянный рост дисковых кэшей (увидел в top'е) и такое же постоянное замедление программы.
Как только я убрал дисковые операции, все стало просто замечательно.
В качестве выхода из этой не очень приятной ситуации я планирую использовать настоящий syslogd (нашел в недрах busybox'а), сократить нформационный вывод, по умолчанию оставив лишь сообщения об ошибках.
Но все же хотелось бы понять на будущее - почему файловые операции вызывают такое поведение системы?
Спасибо.
Записан
Bepec
Гость
Re: 99% загрузка времени ЦП программой
«
Ответ #5 :
Апрель 14, 2014, 10:41 »
Потому что запись на карту медленная. А если система на арме, то ещё и затратная. А вы забивали кеш своими данными постоянно. Висла я думаю система
Записан
titan83
Гость
Re: 99% загрузка времени ЦП программой
«
Ответ #6 :
Апрель 14, 2014, 11:09 »
Цитата: Bepec от Апрель 14, 2014, 10:41
Потому что запись на карту медленная. А если система на арме, то ещё и затратная. А вы забивали кеш своими данными постоянно. Висла я думаю система
99% процессорного времени занимал именно мой процесс, при этом состоянии все остальное даже работало: 3g-соединение, ssh, т.е. я мог управлять системой.
На карту я писал меньше 0,5 килобайта в секунду, я, конечно, понимаю, что запись там блочная, но неужели все настолько печально?
Записан
Bepec
Гость
Re: 99% загрузка времени ЦП программой
«
Ответ #7 :
Апрель 14, 2014, 11:11 »
Никто кроме вас, вашего кода не видел. Мб у вас там пустые цикла в 10 потоках
Ищите сами
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...