LINUX.ORG.RU

Skype жрёт CPU

 , голимая проприетарщина,


0

2

Даны два компа. На обоих арч x86_64 со всеми апдейтами. На обоих скайп из multilib с одним и тем же аккаунтом. На одном работает нормально, на втором сразу со старта начинает пожирать одно ядро. Профиль тёр, не помогло. ЧЗХ?

★★★★★

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

Пусть он тогда на обоих компах гадит, хотя бы. А то непоследовательно выходит как-то.

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

Описание очень похоже на «а-а-а, ваша программа не работает». Без разницы, есть исходники или нет, начальная диагностика всё равно одинаковая: top, perf top, strace -p $pid.

А без этого всего — только пальцем в небо.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от Vinni_Pooh

А железо одинаковое? Может, ресурсы идут на шифрование трафика?

Сомнительно. Нормально работает на core2duo, проблема на core i5 haswell.

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

top

%Cpu0  :  10,6/88,7   99[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||]
%Cpu1  :   3,4/0,7     4[||                                                                       ]
%Cpu2  :   2,0/0,7     3[|                                                                        ]
%Cpu3  :   2,6/2,0     5[|||                                                                      ]
KiB Mem : 22,9/7836600  [|||||||||||||||||                                                        ]
KiB Swap:  0,0/0        [                                                                         ]

  PID  PPID USER     RUSER    TTY          TIME+    RES  %CPU %MEM S COMMAND                        
11386   488 sergey   sergey   ?         10:24.50 0,145g 102,0  1,9 S /usr/lib32/skype/skype         

perf top

http://i.imgur.com/o32VBBU.png

strace -p $pid

restart_syscall(<... resuming interrupted call ...>) = 0
recvmsg(6, 0xffb17a24, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(6, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(7, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=39, events=POLLIN}], 6, 0) = 0 (Timeout)
recvmsg(6, 0xffb17a24, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(6, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(7, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=39, events=POLLIN}], 6, 0) = 0 (Timeout)
recvmsg(6, 0xffb17a24, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(6, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(7, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=39, events=POLLIN}], 6, 0) = 0 (Timeout)
recvmsg(6, 0xffb17a24, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(6, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(7, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=39, events=POLLIN}], 6, 0) = 0 (Timeout)
recvmsg(6, 0xffb17a24, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(6, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(7, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=39, events=POLLIN}], 6, 0) = 0 (Timeout)
recvmsg(6, 0xffb17a24, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(6, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(7, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=39, events=POLLIN}], 6, 0) = 0 (Timeout)
recvmsg(6, 0xffb17a24, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(6, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(7, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=39, events=POLLIN}], 6, 0) = 0 (Timeout)
recvmsg(6, 0xffb17a24, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(6, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(7, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=39, events=POLLIN}], 6, 0) = 0 (Timeout)
recvmsg(6, 0xffb17a24, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(6, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(7, 0xffb17a14, 0)               = -1 EAGAIN (Resource temporarily unavailable)

... и так много раз

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

Из вывода perf top можно предположить, что CPU съедается не в каких-то внутренних циклах, а на частом вызове системных функций. Возможно, очень часто вызывается poll, и тогда тот фикс может помочь.

Попробуй ещё через strace -ttt -p $pid прогнать, чтобы оценить, насколько часто этот poll вызывается. "-ttt" добавляет отметку времени в вывод.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat
1426770769.831086 restart_syscall(<... resuming interrupted call ...>) = 0
1426770769.849137 recvmsg(6, 0xffbe7064, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426770769.849252 recvmsg(6, 0xffbe7054, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426770769.849331 recvmsg(7, 0xffbe7054, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426770769.849352 poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=35, events=POLLIN}], 6, 0) = 0 (Timeout)
1426770769.849420 recvmsg(6, 0xffbe7064, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426770769.849447 recvmsg(6, 0xffbe7054, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426770769.849465 recvmsg(7, 0xffbe7054, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426770769.849481 poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=10, events=POLLIN}, {fd=35, events=POLLIN}], 6, 0) = 0 (Timeout)
1426770769.849505 recvmsg(6, 0xffbe7064, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426770769.849525 recvmsg(6, 0xffbe7054, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426770769.849543 recvmsg(7, 0xffbe7054, 0) = -1 EAGAIN (Resource temporarily unavailable)

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

7700 вызовов poll в секунду — это не нормально.

Я уж понял. И что теперь с этим делать?

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

Кстати, а можно ли как-то узнать какой девайс он так задрачивает?

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

Понял. Буду пробовать, спасибо.

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

Оказалось, что оно в ауре есть. Ни фига не помогло, если нагрузка и уменьшилась, то на пару процентов.

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

А, стоп. Либа-то не работает:

ERROR: ld.so: object '/usr/lib32/skype/skype-poll-fix.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.

Видимо, из-за 64 бит. Это исправимо?

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

Это исправимо?

Предполагается, что gcc -m32 file.c соберёт у тебя 32-битный бинарник. Кажется, в Арче для этого нужен gcc-multilib.

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

Кажется, в Арче для этого нужен gcc-multilib.

Дык уже, вроде.

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

ну не предназначен он для 64бит.

Читать умеем? На обеих машинах 64 бит.

Пихай у виртуалку и ssh -X

Концентрированный упорин. Есть же контейнеры для таких случаев.

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

умеем. Ну свезло на одной. А на другой стандартно.

Везде работает, на одной проблема. Не тупите же, ну.

Да и не стоит держать каку на рабочей машине.

Ваще пушка.

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

Пихай у виртуалку и ssh -X

Концентрированный упорин. Есть же контейнеры для таких случаев.

Поясни плиз. Я некоторый софт на VMware Player пускаю по необходимости под одинаковой Федорой. Т.е. какой-то альтернативный вариант весь его в одной папке хранить, который меньше ресурсов жрёт? Я только Docker хотел начинать тестить для вёб-приложений.

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

Я только Docker хотел начинать тестить для вёб-приложений.

Вот с него и начните, например.

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

Посмотрел чем skype у меня занимается:

1426861650.370898 poll([{fd=3, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=32, events=POLLIN}], 5, 15) = 0 (Timeout)
1426861650.386057 recvmsg(6, 0xff8ce424, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426861650.386120 clock_gettime(CLOCK_MONOTONIC, {931550, 162408927}) = 0
1426861650.386186 recvmsg(6, 0xff8ce404, 0) = -1 EAGAIN (Resource temporarily unavailable)
1426861650.386239 clock_gettime(CLOCK_MONOTONIC, {931550, 162527852}) = 0
1426861650.386287 poll([{fd=3, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLIN}, {fd=9, events=POLLIN}, {fd=32, events=POLLIN}], 5, 0) = 0 (Timeout)
Ну 50 раз в секунду. (2% cpu)

kdev
()
8 июля 2016 г.
Ответ на: комментарий от Deathstalker

Да пофиг, сто лет назад само прошло. Но за вариант избавления от скайпа спасибо.

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