Para identificar procesos que consuman mucha memoria, podemos usar el comando ps, al igual como lo haciamos para identificar procesos con alto consumo de CPU, solo que en este caso hacemos referencia a las columna de memoria.
[oracle@m9 ~]$ ps -e -o pmem,pid,user,tty,args | grep -i oracle | sort -n -k 1 -r | head 8.6 29529 oracle ? oracleorc11g (LOCAL=NO) 8.4 30428 oracle ? oracleorc11g (LOCAL=NO) 7.3 30445 oracle ? oracleorc11g (LOCAL=NO) 6.8 18851 oracle ? oracleorc11g (LOCAL=NO)
Y para poder buscar el proceso que esta ocupando más memoria en dentro de oracle, ejecutamos el siguiente query dando el valor del proceso que esta consumiendo más memoria, en mi caso 29529.
SET LINESIZE 80 HEADING OFF FEEDBACK OFF SELECT RPAD('USERNAME : ' || s.username, 80) || RPAD('OSUSER : ' || s.osuser, 80) || RPAD('PROGRAM : ' || s.program, 80) || RPAD('SPID : ' || p.spid, 80) || RPAD('SID : ' || s.sid, 80) || RPAD('SERIAL# : ' || s.serial#, 80) || RPAD('MACHINE : ' || s.machine, 80) || RPAD('TERMINAL : ' || s.terminal, 80) || RPAD('SQL TEXT : ' || q.sql_text, 80) FROM v$session s ,v$process p ,v$sql q WHERE s.paddr = p.addr AND p.spid = '&PID' AND s.sql_address = q.address(+) AND s.sql_hash_value = q.hash_value(+);
Otro forma es usando el comando vmstat (virtual memory statistics)
[oracle@m9 ~]$ vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 6 0 224688 68784 44952 1279624 1 1 49 126 14 4 13 9 77 1 0
Si observamos que nuestro servidor esta haciendo uso de mucho swapping (columnas si y so) entonces tenemos un cuello de botella en la memoria. En mi caso no lo tengo, pues los valores son practicamente 0:
[oracle@m9 ~]$ vmstat 2 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 4 0 224692 70412 45776 1265088 1 1 49 126 14 5 13 9 77 1 0 5 0 224692 70024 45788 1265252 0 0 2 252 4166 8604 14 45 41 0 0 3 0 224692 74124 45800 1265288 0 0 0 134 4164 8381 13 43 44 0 0
Para los que desconocen que es swapping, es el proceso de copiar memoria a disco y viceversa. Esto ocurre cuando no existe suficiente memoria para satisfacer las necesidades del servidor. También podemos hacer uso del comando free, para mostrar el uso de memoria actual y virtual(swap).
[oracle@m9 ~]$ free total used free shared buffers cached Mem: 4063964 3979312 84652 0 46296 1262680 -/+ buffers/cache: 2670336 1393628 Swap: 10241336 224660 10016676
Si anexamos la opcion -s podemos desplegarlo cada n segundos. O usar el comando watch.
[oracle@m9 ~]$ free -s 3 [oracle@m9 ~]$ watch -n 3 -d free Every 3.0s: free Tue Jul 6 09:58:18 2010 total used free shared buffers cached Mem: 4063964 3994596 69368 0 47340 1270432 -/+ buffers/cache: 2676824 1387140 Swap: 10241336 224660 10016676
Otra forma más de ver la memoria actual y swap es la siguiente.
[oracle@m9 ~]$ cat /proc/meminfo MemTotal: 4063964 kB MemFree: 85580 kB Buffers: 45300 kB Cached: 1246752 kB SwapCached: 9160 kB Active: 3012068 kB Inactive: 571704 kB SwapTotal: 10241336 kB SwapFree: 10016660 kB Dirty: 2268 kB Writeback: 0 kB AnonPages: 2287296 kB Mapped: 767112 kB Slab: 109260 kB SReclaimable: 70500 kB SUnreclaim: 38760 kB PageTables: 66480 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 12273316 kB Committed_AS: 6468308 kB VmallocTotal: 34359738367 kB VmallocUsed: 163756 kB VmallocChunk: 34359574423 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 10176 kB DirectMap2M: 4184064 kB
Para desplegara cada 5 segundos
watch -n 5 -d cat /proc/meminfo
Si vemos que existe una gran cantidad usasa de memoria swap (un valor bajo en SwapFree), es una indicación de que nuestro servidor necesita más memoria. Revisando el uso de memoria de días anteriores Si quisieramos revisar el consumo de memoria de un día diferente del mes, solo necesitamos hacer uso del comando sar con la opción -f. La información que utiliza sar para generar el reporte se localiza en la ruta /var/log/sa con la convencion saNN, donde NN es el día del mes. Por ejemplo, si quisieramos ver las estadísticas de paging de la memoria del primer día del mes, ejecutamos sar con la opción B(estadísticas de paging) y -f (file).
[oracle@m9 ~]$ sar -B -f /var/log/sa/sa01 Linux 2.6.27.25-78.2.56.fc9.x86_64 (m9) 07/01/2010 12:00:01 AM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 12:10:01 AM 282.97 1637.97 2605.06 1.03 1127.19 230.42 2.24 220.26 94.67 12:20:01 AM 85.98 2227.14 2435.13 0.05 1127.23 220.21 1.49 211.45 95.38 12:30:01 AM 43.20 1812.33 2220.57 0.02 986.01 167.66 2.39 155.49 91.44 12:40:01 AM 38.19 174.71 2520.40 0.13 974.44 39.01 0.16 33.15 84.65 12:50:01 AM 33.05 126.10 2526.58 0.00 939.17 19.81 0.26 19.49 97.08 01:00:01 AM 0.94 117.49 2297.94 0.00 842.23 7.13 0.00 6.75 94.68 01:10:01 AM 8517.81 7054.91 2831.65 4.23 5114.19 3894.75 10.41 3802.94 97.38 01:20:01 AM 109.02 129.82 2514.74 0.18 920.41 0.00 0.00 0.00 0.00 01:30:01 AM 3.95 116.88 2320.21 0.02 857.86 0.00 0.00 0.00 0.00
Aqui podemos observar un incremento a las 01:10:01 AM de paging en el disco (pgpgin/s, pgpgout/s). También podemos usar la opción -W para ver el swapping
[oracle@m9 ~]$ sar -W -f /var/log/sa/sa01 Linux 2.6.27.25-78.2.56.fc9.x86_64 (m9) 07/01/2010 12:00:01 AM pswpin/s pswpout/s 12:10:01 AM 2.25 0.17 12:20:01 AM 0.11 0.38 12:30:01 AM 0.06 0.95 12:40:01 AM 0.26 0.11 12:50:01 AM 0.01 0.14 01:00:01 AM 0.00 0.07 01:10:01 AM 15.60 33.04 01:20:01 AM 0.72 0.00 01:30:01 AM 0.13 0.00 01:40:01 AM 1.57 0.00 01:50:01 AM 1.22 0.00 02:00:01 AM 1.87 3.22 02:10:01 AM 12.91 0.06
Existen varias opciones para mostrar la memoria con sar, otra de ellas es con -r que genera un reporte con estadisticas del uso de memoria y swap.
[oracle@m9 ~]$ sar -r Linux 2.6.27.25-78.2.56.fc9.x86_64 (m9) 07/06/2010 12:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad 12:10:01 AM 34860 4029104 99.14 32620 1324864 10026080 215256 2.10 10328 12:20:01 AM 40468 4023496 99.00 34092 1324428 10026460 214876 2.10 10292 12:30:01 AM 53092 4010872 98.69 37300 1301612 10026096 215240 2.10 10520 12:40:01 AM 57340 4006624 98.59 40412 1298040 10026004 215332 2.10 10580 12:50:01 AM 53336 4010628 98.69 42880 1299500 10025988 215348 2.10 10564 01:00:01 AM 84828 3979136 97.91 43588 1263016 10026028 215308 2.10 10224 01:10:01 AM 237544 3826420 94.15 13268 1156804 10017812 223524 2.18 10268