Estou no processo de controle de qualidade / depuração de um projeto em um sistema linux incorporado personalizado. O problema é que estamos muito apertados na memória e até mesmo alguns megas podem causar problemas com o nosso software.
O que estou vendo (às vezes) é que, quando nosso sistema trava (falhas suaves), nosso próprio software não ocupa mais memória do que o normal. Mas o que é estranho é que o kernel do linux do linux tem um número de objetos MUITO maior do que o normal em seu cache slab de 32 bytes:
size-32 103674 103734 32 113 1 : tunables 120 60 0 : slabdata 918 918 0
É assim que a placa se parece em circunstâncias normais:
size-32 5400 6554 32 113 1 : tunables 120 60 0 : slabdata 58 58 0
Obviamente, essa é uma diferença significativa.
Eu sei que não há muita informação aqui, mas esta é realmente toda a informação que tenho para continuar. Existe alguma maneira de determinar o que a laje contém? Ou onde foi alocado ou algo parecido? Ou talvez apenas forçá-lo a liberar sua memória?
Isso está sendo executado em uma placa baseada em ARM com 64mB de memória RAM executando um kernel 2.6.30.
Btw, essa é a totalidade do que está sendo executado na máquina.
10711 8778 root R 2980 4.9 0 0.0 top
8745 2740 root S 6452 10.7 0 0.0 sshd: root@ttyp1
9411 2740 root S 6312 10.4 0 0.0 sshd: root@ttyp2
2740 1 root S 3704 6.1 0 0.0 /usr/sbin/sshd
8778 8745 root S 2984 4.9 0 0.0 -sh
10034 9411 root S 2984 4.9 0 0.0 -sh
1 0 root S 2980 4.9 0 0.0 init
9432 1 root S 2848 4.7 0 0.0 runsv ui
1115 1 root S < 1576 2.6 0 0.0 udevd --daemon
989 2 root SW< 0 0.0 0 0.0 [mmcqd]
223 2 root SW< 0 0.0 0 0.0 [kswapd0]
175 2 root SW< 0 0.0 0 0.0 [kblockd/0]
222 2 root SW 0 0.0 0 0.0 [pdflush]
221 2 root SW 0 0.0 0 0.0 [pdflush]
6 2 root SW< 0 0.0 0 0.0 [khelper]
5 2 root SW< 0 0.0 0 0.0 [events/0]
186 2 root SW< 0 0.0 0 0.0 [khubd]
2 0 root SW< 0 0.0 0 0.0 [kthreadd]
220 2 root SW 0 0.0 0 0.0 [khungtaskd]
3 2 root SW< 0 0.0 0 0.0 [ksoftirqd/0]
4 2 root SW< 0 0.0 0 0.0 [watchdog/0]
12 2 root SW< 0 0.0 0 0.0 [async/mgr]
189 2 root SW< 0 0.0 0 0.0 [kseriod]
194 2 root SW< 0 0.0 0 0.0 [kmmcd]
224 2 root SW< 0 0.0 0 0.0 [aio/0]
225 2 root SW< 0 0.0 0 0.0 [unionfs_siod/0]
226 2 root SW< 0 0.0 0 0.0 [nfsiod]
227 2 root SW< 0 0.0 0 0.0 [crypto/0]
895 2 root SW< 0 0.0 0 0.0 [zd1211rw]
899 2 root SW< 0 0.0 0 0.0 [mtdblockd]
972 2 root SW< 0 0.0 0 0.0 [usbhid_resumer]
992 2 root SW< 0 0.0 0 0.0 [rpciod/0]
e ainda está crescendo
size-32 181312 181365 32 113 1 : tunables 120 60 0 : slabdata 1605 1605 0
Atualização:
Este é o estado atual:
Mem: 38416K used, 21764K free, 0K shrd, 1836K buff, 11548K cached
CPU: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.01 0.02 0.05 1/28 11050
PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND
8745 1 root S 6452 10.7 0 0.0 sshd: root@ttyp1
11045 1 root S 3704 6.1 0 0.0 /usr/sbin/sshd
8778 8745 root S 2984 4.9 0 0.0 -sh
1 0 root S 2980 4.9 0 0.0 init
11050 8778 root R 2980 4.9 0 0.0 top
989 2 root SW< 0 0.0 0 0.0 [mmcqd]
223 2 root SW< 0 0.0 0 0.0 [kswapd0]
175 2 root SW< 0 0.0 0 0.0 [kblockd/0]
222 2 root SW 0 0.0 0 0.0 [pdflush]
221 2 root SW 0 0.0 0 0.0 [pdflush]
6 2 root SW< 0 0.0 0 0.0 [khelper]
5 2 root SW< 0 0.0 0 0.0 [events/0]
186 2 root SW< 0 0.0 0 0.0 [khubd]
2 0 root SW< 0 0.0 0 0.0 [kthreadd]
220 2 root SW 0 0.0 0 0.0 [khungtaskd]
3 2 root SW< 0 0.0 0 0.0 [ksoftirqd/0]
4 2 root SW< 0 0.0 0 0.0 [watchdog/0]
12 2 root SW< 0 0.0 0 0.0 [async/mgr]
189 2 root SW< 0 0.0 0 0.0 [kseriod]
194 2 root SW< 0 0.0 0 0.0 [kmmcd]
224 2 root SW< 0 0.0 0 0.0 [aio/0]
225 2 root SW< 0 0.0 0 0.0 [unionfs_siod/0]
226 2 root SW< 0 0.0 0 0.0 [nfsiod]
227 2 root SW< 0 0.0 0 0.0 [crypto/0]
895 2 root SW< 0 0.0 0 0.0 [zd1211rw]
899 2 root SW< 0 0.0 0 0.0 [mtdblockd]
972 2 root SW< 0 0.0 0 0.0 [usbhid_resumer]
992 2 root SW< 0 0.0 0 0.0 [rpciod/0]
size-32 191069 191083 32 113 1 : tunables 120 60 0 : slabdata 1691 1691 0