
Estoy corriendo arriba y veo que de 502968 KB, se usan 48064 KB dejando 16884 KB libres. Pero luego, cuando miro los procesos individuales, veo que mysql consume en ocasiones el 9,4% de mi RAM, pero nada más parece consumir nada. ¿Qué está consumiendo toda mi RAM?
Aquí hay una captura de pantalla desde arriba:
top - 20:46:07 up 1 min, 1 user, load average: 0.18, 0.05, 0.02
Tasks: 81 total, 1 running, 80 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.4 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 502968 total, 241236 used, 261732 free, 10488 buffers
KiB Swap: 524284 total, 0 used, 524284 free, 106756 cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1584 dmackey 20 0 20508 1372 1000 R 0.4 0.3 0:00.01 top
1 root 20 0 26664 2456 1340 S 0.0 0.5 0:00.69 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u:0
7 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/u:0H
8 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
10 root 20 0 0 0 0 S 0.0 0.0 0:00.24 rcu_sched
11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
12 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default
Y aquí hay uno gratis:
total used free shared buffers cached
Mem: 502968 355252 147716 0 10816 111548
-/+ buffers/cache: 232888 270080
Swap: 524284 0 524284
Respuesta1
Nada.
Es Linux, y eso escómo funciona.
Utilizará memoria "libre" para el almacenamiento en caché del disco, porque ¿qué sentido tiene tener un recurso infrautilizado?
Cuando un proceso quiere más memoria, la solicitará al kernel y (generalmente) la obtendrá.
Ah... y MySQL usará todo lo que necesite (según lo configurado en /etc/my.cnf
) para que los índices, consultas y tablas se almacenen en caché desde el disco a la memoria para acelerar los tiempos de acceso.
Respuesta2
Es simplemente cualquier basura que quede en la memoria de cómo se usó por última vez. Lo más probable es que sean datos leídos del disco o escritos en el disco. El sistema operativo no libera memoria porque es un desperdicio por tres razones:
Si la memoria no se utiliza pronto, liberarla no sirve de nada.
Si la memoria se utiliza pronto, liberarla es solo un trabajo que debe deshacerse ya que debe volver a usarse.
Si se necesita nuevamente la información que estaba en la memoria, liberar la memoria significará tener que obtener esa información del disco en lugar de la memoria, que es mucho más lenta.
Los sistemas operativos modernos sólo liberan memoria si no tienen otra opción. Si estás pensando: "Quiero que esa memoria esté libre ahora para poder usarla más tarde", detente. No es necesario que la memoria esté libre ahora para poder utilizarla más tarde. No hay ninguna compensación aquí, es una pura ganancia mantener la memoria en uso hasta que sea necesaria.
Respuesta3
Registrar el resultado de top para análisis futuros es la mejor manera de responder a su pregunta. No existe una solución rápida; será necesaria alguna investigación observada a lo largo del tiempo. Algo único que uso para hojear la superficie de lo que está usando mi memoria es poner esto en el crontab de root.
/bin/bash top -b -n 1 | head > `/var/log/date +%e_%T`
Luego utilizo algo de manipulación de texto y buscapersonas para rastrear tendencias. Esta publicación de desbordamiento de pilahttps://stackoverflow.com/questions/7908953/how-to-measure-cpu-usagetiene algunos ejemplos más completos sobre el uso de top como este y la personalización de top mediante .toprc
, para las estadísticas de la CPU, pero se puede adaptar fácilmente para satisfacer sus necesidades.