LINUX.ORG.RU

Как понять, отчего программа тормозит?

 


3

2

Иногда у меня сильно тормозят некоторые программы (chrome/chromium, файловые менеджеры на разных тулкитах и даже gvim иногда). Иногда я подключаюсь к программе при помощи strace и пытаюсь понять, в чём причина тормозов. Как правило, безуспешно — мне не хватает базовых знаний (я не программист).

Вопрос: что (кроме man strace) нужно знать для поиска тормозов ПО?

Можете накидать годных ссылок на описание процесса решения проблем при помощи strace (и другого ПО)?

★★★★★

strace не для поиска тормозов в общем случае

Harald ★★★★★
()
  1. Сначала я бы посмотрел что показывают себя htop и nettop и iotop

  2. Если не дало ответа, то рекомендую запустить программы через hotspot(по сути это perf, но даёт более менее шустро записать работу программы и отобразить её графически), дальше можно делать некоторые предположения/выводы

AKonia ★★
()
Ответ на: комментарий от Harliff

sysprof-cli -c app_name Записать профайлинг апликухи sysprof ./capture.syscap Открыть и посмотреть графики красивые, правда часто бесполезные

Или если подлагивать начинает всё то где что что-то хз что, надо профайлить всю систему тогда просто sysprof и жмакай кнопку record потом смотри что там жрёт ресурсы. Для сравнения можешь сделать профайлинг тогда когда всё ок и ничего не лагает, топом поймать момент когда начинается и начать запись. Потом открыть два штука графиков и тупо сравнить.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

sysprof и жмакай кнопку record потом смотри что там жрёт ресурсы

Попробовал. Вижу, что тормозит xorg вообще и /usr/lib/x86_64-linux-gnu/libpixman-1.so.0.36.0 в частности.

Разбираюсь…

Спасибо за совет.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от AKonia

Сначала я бы посмотрел что показывают себя htop и nettop и iotop

Всё спокойно.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от AKonia

Если не дало ответа, то рекомендую запустить программы через hotspot(по сути это perf, но даёт более менее шустро записать работу программы и отобразить её графически), дальше можно делать некоторые предположения/выводы

Попробовал на gvim. Серьёзных аномалий пока не вижу. Похоже, надо запускать на других системах и сравнивать результаты.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff

Снял данные по gvim (с помощью hotspot). На первом месте там libcairo и libpango. Можно ли из этого сделать какие-то выводы?

Harliff ★★★★★
() автор топика
Последнее исправление: Harliff (всего исправлений: 1)
Ответ на: комментарий от e000xf000h

Тогда бы iowait был бы большой, по идее (здесь он минимален).

Harliff ★★★★★
() автор топика
Ответ на: комментарий от psiman

Может винт сыпется.

Нет, с винтом (ssd) всё нормально.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от e000xf000h

вангую что проблема с планировщиком ио

$ cat /sys/devices/pci0000:00/0000:00:1d.0/0000:02:00.0/nvme/nvme0/nvme0n1/queue/scheduler

[none] mq-deadline
Harliff ★★★★★
() автор топика
Последнее исправление: Harliff (всего исправлений: 1)

Как именно тормозит? В чем выражаются тормоза? Что нужно сделать чтобы их воспроизвести?

запускай программу с strace -v -tt -T, воспроизведи торможение, закончи выполнение работы программы, потом в выхлопе стрейса ищи между какими сисколлами прошло много времени и думай как могут быть связаны эти тормоза и эти сисколлы

slowpony ★★★★★
()
Ответ на: комментарий от slowpony

Как именно тормозит? В чем выражаются тормоза?

В случае с gvim: задержка 0,5-1 сек. при вставке новой строки () и при листании (CTRL-F/CTRL-B, CTRL-E/CTRL-Y).

Что нужно сделать чтобы их воспроизвести? UPD: Например, зайти в справку (:help) и зажать CTRL-E

Без конфига (gvim -u NONE) - тормозит чуть меньше, но всё равно ощутимо.

запускай программу с strace -v -tt -T …

Хорошая идея, спасибо! Попробую.

Harliff ★★★★★
() автор топика
Последнее исправление: Harliff (всего исправлений: 1)
Ответ на: комментарий от slowpony

С strace -v -tt -T попробую чуть позже. Нашёл интересный ключ -c у strace - с ним выдаётся статистика.

Запустил gvim, зашёл в справку и зажал CTRL-E. 248 строк справки листались около 40 секунд. Ниже вывод strace -c. Это о чём-нибудь говорит?

$ strace -c -f gvim 
strace: Process 14883 attached
strace: Process 14884 attached
strace: Process 14885 attached
strace: Process 14886 attached
strace: Process 14887 attached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 59.23    0.098785         232       425        14 futex
 13.65    0.022769           2     11097           poll
  9.59    0.015992           1     10124      9168 recvmsg
  4.42    0.007374           1      5501      4001 stat
  2.64    0.004403           2      1577           writev
  2.53    0.004227           1      2268           brk
  1.85    0.003091           1      1566       762 openat
  1.40    0.002327           5       438           mmap
  1.21    0.002011           1      1473           read

(мелочи пропущены)

------ ----------- ----------- --------- --------- ----------------
100.00    0.166770                 37975     14130 total
Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff

мне вживую никогда не попадались ситуации, чтобы именно статистика была полезна. обычно это затупы на единичных конкретных моментах, которые в статистиках и графиках съедаются усреднениями и аппроксимацией. но я кроме сраного веба обычно никогда и не дебажу ничего, так что у меня своя деформация.

slowpony ★★★★★
()
Ответ на: комментарий от Harliff

total seconds - 0.166770 говорит о том, что проблема не в сисколлах, а где-то в юзерспейсе, видимо. но если найти МЕЖДУ какими сисколлами проходит много времени - можно попробовать понять где именно в юзерспейсе эта проблема

slowpony ★★★★★
()
Ответ на: комментарий от slowpony

Запустил strace -v -tt -T.

Из интересного: увидел

poll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}], 3, 359) = 1 ([{fd=5, revents=POLLIN}]) <0.092010>

Поискал выше про fd=5:

socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 5 <0.000029>
connect(5, {sa_family=AF_UNIX, sun_path=@"/tmp/.X11-unix/X0"}, 20) = 0 <0.000011>
getpeername(5, {sa_family=AF_UNIX, sun_path=@"/tmp/.X11-unix/X0"}, [124->20]) = 0 <0.000006>

Я в правильном направлении двигаюсь?

Harliff ★★★★★
() автор топика
Последнее исправление: Harliff (всего исправлений: 2)
Ответ на: комментарий от Harliff

Ну дык при запуске mc он сразу запускается или тупит?

anonymous
()

тупые программы используют кеш.
честно, я пытался отключить кеш в хроме не это невозможно. при 16 то гб озу)
тупое ядро не умеет в io. или тупая фс.
потому что где то в районе 4.0 и выше сломали планировщик i/o или его взаимодействие с планировщиком процессов.

у тебя не бтрфс случаем?

чёты зажал конфиг как стеснительная барышня в оппосте, смысл тогда такого вброса?

darkenshvein ★★★★★
()
Ответ на: комментарий от Harliff

[none] mq-deadline

поставь «noop» он самый примитивный для SSD самый раз будет.

e000xf000h
()
Ответ на: комментарий от darkenshvein

у тебя не бтрфс случаем?

Нет, ext4.

Параметры монтирования: rw,relatime,nodelalloc,errors=remount-ro,data=journal

mount:

/dev/mapper/neivro-debian on / type ext4 (rw,relatime,nodelalloc,errors=remount-ro,data=journal)
/dev/mapper/neivro-home on /home type ext4 (rw,relatime,nodelalloc,stripe=32603,data=journal)

чёты зажал конфиг как стеснительная барышня в оппосте, смысл тогда такого вброса?

О каком конфиге речь?

Harliff ★★★★★
() автор топика
Последнее исправление: Harliff (всего исправлений: 1)
Ответ на: комментарий от anonymous

Это не просто магическое число, это простое число!

anonymous
()
Ответ на: комментарий от anonymous

data=journal

Это зачем?

Для сохранности данных. Данные сначала пишутся в журнал FS, потом на диск.

Harliff ★★★★★
() автор топика

дядь, да у тебя палец (иксы, вся система…) сломан

anonymous
()
Ответ на: комментарий от Harliff

data=journal Для сохранности данных

Ты же понимаешь, что из-за двойной записи у тебя скорость (записи) уменьшается в 2 раза, включая iops.

При сомнительной гарантии сохранности данных при внезапном выключении, например контроллер диска может наплевать на последовательность операций и писать как уме захочется.

anonymous
()
Ответ на: комментарий от Harliff

stripe=32603

И это что за магическое число?

Хороший вопрос, кстати.

Может у тебя ssd (или что там у тебя: драйвер диска, лвм, или криптоконтейнер) уже «таво». Чтобы выделять блоки и выравнивать данные по простому числу не кратному степени двойки - это или слишком заумно или абсолютно бессмысленно (т.е. ошибочно).

anonymous
()
Ответ на: комментарий от Deleted

man top

Кстати, слона то я и не заметил.

Процессор загружает Xorg.

Ок, буду с ним разбираться.

Всем спасибо за помощь, закрываем тему.

Harliff ★★★★★
() автор топика
Ответ на: комментарий от Harliff

На первом месте там libcairo и libpango

Конечно, возможны варианты, но скорее всего, у тебя графика без аппаратного ускорения, что включает обработку графики на CPU. Смотри в Xorg.0.log на предмет используемых драйверов.

i-rinat ★★★★★
()
Ответ на: комментарий от Harliff

Оказывается, я знатный спец по стрельбе себе в ногу.

Обнаружил:

# cat /etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
  Identifier "Intel Graphics"
  Driver "intel"
  Option "AccelMethod" "uxa"
EndSection

После убирания "AccelMethod" "uxa" тормоза пропали.

Harliff ★★★★★
() автор топика

Всем спасибо за помощь!

Harliff ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.