Linux Mint 16: o Skype usa 100% do núcleo da CPU

1

Eu uso o Linux Mint 16 Petra 64bit Cinnamon. Quando eu instalo o Skype (seja a partir do repo ou diretamente da Microsoft), ele logo começa a usar 100% de 1 CPU, duplicando o consumo de energia do meu sistema.

Eu tentei remover a pasta ~/.skype e fazer login com uma conta diferente.

Eu tentei remover o skype dos repositórios e instalá-lo diretamente da Microsoft .

Há algo que eu possa fazer para solucionar esse problema?

Eu não consigo reproduzir este problema com o antigo Mints, nem com o Ubuntu Saucy e o Raring.

O não se manifesta, se eu iniciar o skype e nunca logar (manter o skype exibindo a tela de login). Mas se o skype estava logado antes e teve o alto consumo de CPU - clicar em "Sair" não ajuda no problema (além disso, mesmo que existisse, não há sentido em usar o Skype sem fazer login)

Seguindo o aviso de @slm, posso incluir a saída strace . Parece que o Skype está ocupado fazendo poll syscall ... Eu pensei que a pesquisa por recurso introduza o processador ocioso, não o uso de 100%.

 strace -c skype
[ Process PID=31614 runs in 32 bit mode. ]

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         1           execve
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                     1           total
System call usage summary for 32 bit mode:
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 96.95   45.349256         493     92056           poll
  1.26    0.588104           2    279026           clock_gettime
  0.99    0.462877           3    183996    182979 recv
  0.33    0.156517           2     79850       468 stat64
  0.30    0.138574           2     79740           gettimeofday
  0.10    0.047275          45      1040       174 futex
  0.04    0.020046        1671        12           nanosleep
  0.01    0.003025           4       792           writev
  0.00    0.002037           2       871           write
  0.00    0.001928           3       692       143 read
  0.00    0.001482           2       944       561 open
  0.00    0.000591           2       333       238 access
  0.00    0.000584           1       466           mmap2
  0.00    0.000577           1       421           madvise
  0.00    0.000485           1       431           close
  0.00    0.000462           4       120           munmap
  0.00    0.000378           3       115           mprotect
  0.00    0.000372           4        86           fstatfs64
  0.00    0.000269           1       263           fstat64
  0.00    0.000175           3        66        29 recvmsg
  0.00    0.000113           1       121           time
  0.00    0.000108           1       113         5 lstat64
  0.00    0.000082           3        29           getdents64
  0.00    0.000056           2        30           fadvise64_64
  0.00    0.000047           3        15           openat
  0.00    0.000046          15         3           shmdt
  0.00    0.000045           2        24           sendmsg
  0.00    0.000038           2        22           clone
  0.00    0.000037           1        33           socket
  0.00    0.000032           2        13           _llseek
  0.00    0.000032          11         3           shmat
  0.00    0.000032          11         3           shmget
  0.00    0.000031           1        29           brk
  0.00    0.000027           5         6           shmctl
  0.00    0.000015           2         9           send
  0.00    0.000013           0        27           fcntl64
  0.00    0.000011           2         6         2 connect
  0.00    0.000007           2         3           readlink
  0.00    0.000007           1        13           rt_sigaction
  0.00    0.000005           1         4           geteuid32
  0.00    0.000005           1         4           getsockname
  0.00    0.000003           0        10           uname
  0.00    0.000003           3         1           eventfd2
  0.00    0.000003           3         1           pipe2
  0.00    0.000002           2         1           set_tid_address
  0.00    0.000002           2         1           getpeername
  0.00    0.000001           1         2           rt_sigprocmask
  0.00    0.000001           1         2           getrlimit
  0.00    0.000001           1         2           clock_getres
  0.00    0.000001           1         1           set_robust_list
  0.00    0.000000           0         2           unlink
  0.00    0.000000           0         2           chmod
  0.00    0.000000           0         3         3 mkdir
  0.00    0.000000           0         1           pipe
  0.00    0.000000           0        22           ioctl
  0.00    0.000000           0         1           umask
  0.00    0.000000           0         4           statfs
  0.00    0.000000           0         4           fstatfs
  0.00    0.000000           0         2           flock
  0.00    0.000000           0         3           getuid32
  0.00    0.000000           0         1           getgid32
  0.00    0.000000           0         1           getegid32
  0.00    0.000000           0         1           getresuid32
  0.00    0.000000           0         1           getresgid32
  0.00    0.000000           0         2           gettid
  0.00    0.000000           0         1           sched_getaffinity
  0.00    0.000000           0         1           set_thread_area
  0.00    0.000000           0         4         1 bind
  0.00    0.000000           0         1           listen
  0.00    0.000000           0         2           sendto
  0.00    0.000000           0         1           shutdown
------ ----------- ----------- --------- --------- ----------------
100.00   46.775820                721911    184603 total

Quando eu atribuo strace à execução do skype com sudo strace -p $(pgrep skype) , recebo toneladas das seguintes entradas:

clock_gettime(CLOCK_MONOTONIC, {7553, 920730509}) = 0
recv(6, 0xf967e5a8, 4096, 0)            = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {7553, 920937548}) = 0
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=12, events=POLLIN}, {fd=28, events=POLLIN}], 6, 0) = 0 (Timeout)
recv(6, 0xf967e5a8, 4096, 0)            = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {7553, 921039735}) = 0
recv(6, 0xf967e5a8, 4096, 0)            = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {7553, 921089170}) = 0
poll([{fd=3, events=POLLIN}, {fd=7, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, events=POLLIN}, {fd=12, events=POLLIN}, {fd=28, events=POLLIN}], 6, 0) = 0 (Timeout)
    
por Adam Ryczkowski 12.01.2014 / 10:50

2 respostas

0

Após a reinstalação de todo o sistema aparentemente da mesma forma que o sistema afetado foi instalado, o problema nunca reapareceu.

( E quem diz que você não precisa formatar o disco rígido para resolver problemas no Linux?; -) )

    
por 14.02.2014 / 09:46
2

perfil strace

Você pode tentar depurá-lo ainda mais usando strace para ver quais chamadas de skype estão causando o aumento nos recursos. Isso mostrará a você o que o sistema chama skype está preso.

Exemplo

$ strace -c ls
afile1  afile2  afile3  afile4  afile5
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         8           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0        10           open
  0.00    0.000000           0        13           close
  0.00    0.000000           0         1           stat
  0.00    0.000000           0        11           fstat
  0.00    0.000000           0        27           mmap
  0.00    0.000000           0        18           mprotect
  0.00    0.000000           0         2           munmap
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         2           rt_sigaction
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         2           ioctl
  0.00    0.000000           0         1         1 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         2           getdents
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0         2           statfs
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           openat
  0.00    0.000000           0         1           set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                   110         1 total

top & htop

Você também pode monitorar skype usando uma ferramenta como top ou htop para ver o que os processos estão fazendo no geral.

strace-anexandoaumprocessoemexecução

Vocêtambémpodeusarstraceparaanexaraprocessosjáemexecução.Issopermiteanexardepoisqueelescomeçaramasecomportarmal.

Exemplo

Digamosquequeremosanexaraonossoprocessohtopjáemexecuçãoacima.

$pgrephtop32495

EsteéoIDdoprocessoPIDdehtop.Vocêpodeusá-losparaconectarstrace.

$strace-p32495|&head-10Process32495attachedselect(1,[0],NULL,NULL,{0,729724})=0(Timeout)open("/proc/meminfo", O_RDONLY)         = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f685faf1000
read(3, "MemTotal:        7969128 kB\nMemF"..., 1024) = 1024
read(3, "e:        0\nHugePages_Rsvd:     "..., 1024) = 146
read(3, "", 1024)                       = 0
close(3)                                = 0
munmap(0x7f685faf1000, 4096)            = 0
...
...

UPDATE # 1 - depuração da sondagem () syscalls

O strace do OP fornecido mostra um alto nível de% de chamadas do sistema poll() . Você pode descobrir o que é via man poll .

   poll, ppoll - wait for some event on a file descriptor

Portanto, o Skype está aguardando um descritor de arquivo, mas, nesse caso, não é necessariamente um arquivo, pode ser, mas provavelmente está aguardando um recurso de rede contido em um descritor de arquivo.

Exemplo

Para mostrar isso um pouco melhor, aqui está um exemplo. Digamos que estivéssemos baixando um arquivo de 100MB como este usando wget .

$ wget -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test100.zip

Poderíamos então ver quais descritores de arquivo estavam em uso usando o comando lsof -c wget .

$ lsof -c wget
COMMAND   PID USER   FD   TYPE  DEVICE  SIZE/OFF    NODE NAME
wget    11531 saml  cwd    DIR   253,2      4096 7340394 /home/saml/media/mp3s/kids_music
wget    11531 saml  rtd    DIR   253,1      4096       2 /
wget    11531 saml  txt    REG   253,1    421712  531380 /usr/bin/wget
wget    11531 saml  mem    REG   253,1    310576  544452 /usr/lib64/libgssapi_krb5.so.2.2
...
...
wget    11531 saml  mem    REG   253,1     62368  528212 /usr/lib64/libnss_files-2.17.so
wget    11531 saml  mem    REG   253,1 106055264  803764 /usr/lib/locale/locale-archive
wget    11531 saml  mem    REG   253,1     26254  660143 /usr/lib64/gconv/gconv-modules.cache
wget    11531 saml    0u   CHR   136,2       0t0       5 /dev/pts/2
wget    11531 saml    1u   CHR   136,2       0t0       5 /dev/pts/2
wget    11531 saml    2u   CHR   136,2       0t0       5 /dev/pts/2
wget    11531 saml    3w   CHR     1,3       0t0    1028 /dev/null
wget    11531 saml    4u  IPv4 1543927       0t0     TCP greeneggs.bubba.net:55907->speedtest.wdc01.softlayer.com:htt

Observe a última linha, que é um descritor de arquivo para nossa conexão com o softlayer.com. Portanto, a conexão de rede também é tratada como poll() por meio de um descritor de arquivo. Você pode fazer o mesmo e confirmar usando um comando como:

$ lsof -c skype
    
por 12.01.2014 / 11:20