Archivi tag: memory

Errore su Cisco SOHO 77: MALLOCFAIL

Recentemente, esaminando i log del mio SOHO 77 ho notato la presenza dei seguenti messaggi d’errore:

Mar 10 13:27:24 *** 714: 000185: Mar 10 13:27:25.256 UTC: %SYS-2-MALLOCFAIL: Memory allocation of 65536 bytes failed from 0x801381A8, alignment 0
Mar 10 13:27:24 *** 715: Pool: Processor  Free: 233440  Cause: Memory fragmentation
Mar 10 13:27:24 *** 716: Alternate Pool: None  Free: 0  Cause: No Alternate pool
Mar 10 13:27:24 *** 717:
Mar 10 13:27:24 *** 718: -Process= "IP Input", ipl= 0, pid= 34
Mar 10 13:27:24 *** 719: -Traceback= 8013C184 8013E2A8 801381AC 8058F648 80584810 80585568 80248C24 80248F40 80248FF4 80249148 80162010 80165628
soho77-2.jpg

 

Trattandosi di MALLOCFAIL e di Memory Fragmentetion sono quasi sicuro che la poca RAM installata onboard si sia esaurita. Inoltre, poichè sul server ho attivo un demone p2p 24/7, sono altrattanto certo che la causa sia imputabile alla mole di traffico ed alle troppe NAT translations.

Accedo dunque al router, digito un conf t ed imposto dei nuovi timeout per il NAT:

SOHO77(config)# ip nat translation timeout 420
SOHO77(config)# ip nat translation tcp-timeout 120
SOHO77(config)# ip nat translation syn-timeout 120
SOHO77(config)# ip nat translation udp-timeout 120
SOHO77(config)# ip nat translation dns-timeout 120
SOHO77(config)# ip nat translation icmp-timeout 120

Lancio infine un copy run start per rendere permanenti le modifiche appena messe in atto:

SOHO77(config)# copy run start

Ora non resta che controllare che la memoria non stia sempre a tappo (mediante il comando sh memory) e che le translations attive non siano troppe (mediante uno sh ip translations statistics).

A presto.

Monitorare la RAM su un dispositivo Cisco mediante SNMP

Per visualizzare la RAM installata su un qualsiasi dispositivo Cisco è sufficiente lanciare il comando sh ver:

Router# sh ver

La parte di output che ci interessa è simile alla seguente:

Cisco 2851 (revision 53.51) with 249856K/12288K bytes of memory.

Il primo valore, ovvero 249856K indica la memoria libera, mentre il secondo, ovvero 12288K, indica la memoria utilizzata. Sommando dunque questi due valori otterremo la dimensione totale della RAM installata sul dispositivo (in tal caso 256 MB).

Ora, vogliamo monitorare, mediante SNMP, la RAM in uso e quella libera. Per fare ciò è possibile utilizzare i seguenti OID:

.1.3.6.1.4.1.9.9.48.1.1.1.5.1

(per la memoria attualmente in uso dal processor pool)

.1.3.6.1.4.1.9.9.48.1.1.1.5.1

(per la memoria attualmente in uso dall’I/O pool)

.1.3.6.1.4.1.9.2.1.8.0

(per la memoria libera)

Definiamo ora il comando per monitorare la memoria in uso e la memoria libera attraverso delle query SNMP:

nightfly@nightbox:~$ cd /etc/nagios-plugins/config

nightfly@nightbox:~$ sudo nano snmp.cfg

inseriamo la direttiva:

'snmp_cisco_memory_usage' command definition
 define command {
 command_name    snmp_cisco_memory_usage
 command_line    /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -o '$ARG1$','$ARG2$','$ARG3$' -w '$ARG4$','$ARG5$','$ARG6$' -c '$ARG7$','$ARG8$','$ARG9$' -u "bytes,bytes,bytes" -l "Memory" -C '$ARG10$'
 }

In particolare, la flag -l serve per definire una label, la flag -u indica l’unità di misura a cui si riferisce l’output della query, la flag -w specifica le soglie di warning per la memoria libera ed in uso, la flag -c specifica le soglie di critical per la memoria libera ed in uso.

Non ci resta che aggiungere il servizio per il monitoraggio della RAM all’interno del file in cui è definito l’host Cisco:

nightfly@nightbox:~$ cd /etc/nagios3/conf.d

nightfly@nightbox:~$ sudo nano host-cisco_nagios3.cfg

Inseriamo quanto segue:

 define service {
 use                             generic-service         ; Name of service template to use
 host_name                       Cisco
 service_description             Cisco memory usage check
 check_command                  snmp_cisco_memory_usage!.1.3.6.1.4.1.9.9.48.1.1.1.5.1,
 .1.3.6.1.4.1.9.9.48.1.1.1.5.2,.1.3.6.1.4.1.9.2.1.8.0!140000000,10000000!60000000:!100000000,12000000!20000000:!vostracommunitystring
 }

dove i : dopo la soglia di warning 6000000 e quella di critical 40000000 indicano rispettivamente <60000000 e <40000000 (poichè abbiamo a che fare con la memoria libera).

Riavviamo Nagios:

nightfly@nightbox:~$ sudo service nagio3 restart

ed abbiamo finito.

A presto.