Usando um 2.6.30-gentoo-r4
Linux, um sistema de código muito complexo php
é executado (com 4.4.9-pl0-gentoo e 5.2.10-pl0-gentoo), que ocasionalmente apresenta problemas de bloqueio de semáforo. A chamada para a php
função sem_acquire
é bloqueada, fazendo com que o sistema trave.
Contudo, este semáforo em questão não parece estar bloqueado por outro php
processo, o que me levou a investigar mais a fundo. Consegui identificar o php
processo em questão e a strace
ele, levando ao semáforo de bloqueio:
....
09:03:25 gettimeofday({1415696605, 778078}, NULL) = 0
09:03:25 close(5) = 0
09:03:25 gettimeofday({1415696605, 778483}, NULL) = 0
09:03:25 gettimeofday({1415696605, 778708}, NULL) = 0
09:03:25 semop(0, 0xbf8f1692, 1 <unfinished ...>
Esta saída específica semop(0, 0xbf8f1692, 1)
não me ajuda muito, pois não consigo ver o conteúdo de struct sembuf
(segundo argumento para semop
). Talvez alguém veja um problema diretamente nesta semop
chamada?
De qualquer forma, continuei a investigação para verificar a memória no endereço 0xbf8f1692
(como root):
> gdb --pid 1236
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i586-pc-linux-gnu".
Attaching to process 1236
ptrace: Operation not permitted.
(gdb) dump memory /root/output 0xbf8f1692 0xbf9f1692
(gdb) quit
> hexdump -C output
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00100000
Isso significa que o semop
é chamado apontando struct sembuf
para vários zeros? Ou fiz algo errado para descobrir a memória e ver quais semop
são os argumentos? Existem diferentes maneiras de ver o que está acontecendo nessa semop
chamada?
Informações adicionais:
- O sistema Linux não conhece o comando
prctl
nem o arquivoptrace
. - Um diretório nomeado
/proc/sys/kernel/yama
não existe (vejainformações sugeridas).