Ho un programma C++/Linux, che entro 2-3 secondi dall'inizio inizia a sputare l'errore std::bad alloc
su una RAM da 32 GB (e viene riavviato dal chiamante wrapper). Quello che mi interessa davvero è risolvere questo problema, ma vorrei fare un passo alla volta e sviluppare la mia fiducia nella mia comprensione del problema.ottenendo std :: errore error_alloc; Come verificare in modo incrociato che il sistema operativo stia davvero esaurendo la memoria
Sembra che il sistema non sia in grado di allocare memoria per una richiesta new
(ciò si verifica quando il sistema operativo ha esaurito la memoria). Mentre il programma è in esecuzione, su un altro terminale eseguo il comando sar
con il minimo intervallo possibile (1 secondo), ma vedo che kbcached
è una memoria da ~ 24 GB. Perché il sistema operativo non è in grado di rilasciare la cache e rendere tale memoria disponibile per la richiesta new
? O 1 secondo è troppo tempo (rispetto alla velocità di esecuzione dei programmi) o sto facendo qualcosa di sbagliato qui.
Fondamentalmente mi piacerebbe verificare e verificare che il sistema operativo stia effettivamente esaurendo la memoria e quindi non è in grado di allocare memoria, e quindi prendere le cose da questo punto in poi. Come farlo?
Idealmente, vorrei avere le statistiche di sistema proprio nel momento in cui l'allocazione della memoria non riesce, come la quantità di caching, la memoria totale utilizzata up ecc
Solo una nota .. non ha nulla a che fare con la RAM in uso, dipende da quanta memoria libera è presente nello spazio degli indirizzi di memoria virtuale del processo. Non conosco il comando per controllare l'allocazione della memoria virtuale del processo. – Naveen
Immagino che questo sia specifico per il sistema operativo. – sharptooth
Quanta memoria è stata allocata dal processo? Quali vincoli ha il tuo processo? È 32 bit? –