On 11/03/2018 10:23, Michele Orsenigo wrote:

Macchina dopo il riavvio 15gg fa:
Fri Feb 23 07:10:01 CET 2018
               total        used        free      shared  buff/cache   available
Mem:        1527216      182940     1185340       15504      158936     1191596
Swap:        975868           0      975868


Ora:
               total        used        free      shared  buff/cache   available
Mem:        1527216     1209240      157888       25068      160088      152632
Swap:        975868           0      975868

Mi aspetto che entro un paio di giorni cominci ad andare sullo swap
(ho swappiness a 0) e quindi rallentare fino a diventare inutilizzabile,
come è successo le altre volte

questa è una cosa che ho visto anch'io sui desktop e che ho segnalato sia qui in lista che come bug. La segnalazione è stata molto generica e non è stata considerata, anche perché quando avevo segnalato il problema la situazione era davvero drammatica, poi con le versioni successive il problema è diventato più difficile da riprodurre con un uso normale del PC.

Ho cercato di indagare ulteriormente, ma senza molto successo. Ho notato che facendo determinate cose la situazione precipita e puoi arrivare all'intervento di Linux che fa kill di X perché non c'è più memoria disponibile, questo nel giro di poche ore (ad esempio se usi l'estensione di gnome che ti cambia lo sfondo con un'immagine a caso prelevata da una directory ogni pochi minuti... almeno era così, perché quell'estensione poi l'ho disabilitata) o puoi simularlo facendo avvenire il crash in pochi secondi con un piccolo programma C++ (alloca la maggior parte di ram e poi chiede all'utente di far partire una registrazione video del desktop di gnome... però questo potrebbe essere un altro problema, cioè un bug della registrazione desktop di gnome).

Il problema secondo me è di gnome e in specifico gnome-shell. Ho letto che hanno fatto recentemente un rifacimento della gestione della memoria (è da quella versione che ho iniziato a verificare questo problema). Avevo fatto delle prove su una macchina con installato XFCE e senza gnome e li non mi sembrava ci fosse questo problema (però questa macchina ha architettura i386, mentre quelle su cui ho riscontrato il problema hanno architettura amd64).

Una sensazione mia è che il problema sia la gestione della memoria non più usata, ho la sensazione che quando un'applicazione non ha più bisogno di memoria allocata la rilascia, ma in realtà non viene rilasciata subito, ma resta ancora occupata per un tot di tempo (che può diventare molto lungo) e questo causa la saturazione di memoria.

Sul server hai installato anche gnome?

Provo ad allegare il sorgente del file C++, se qualcuno vuole testare... deve avere gnome e non deve avere nessun dato non salvato perché a me causa l'uccisione di X e quindi di tutti i programmi grafici in esecuzione. Potrebbe essere che a seconda di quanta RAM si ha a disposizione occorra cambiare la percentuale di allocazione (ora alloca i 9/10 di RAM e io ho 4GB). Una volta avviato bisogna far partire la registrazione del desktop ti gnome come indicato dal messaggio che appare.

Non ho ancora riportato questo programma nel bug report perché nessuno ha risposto e quindi sembra che nessun altro abbia riscontrato questa problematica.

Ciao
Davide

--
Dizionari: http://linguistico.sourceforge.net/wiki
Perché microsoft continua a compiere azioni illegali?:
http://linguistico.sf.net/wiki/doku.php?id=traduzioni:ms_illegal
GNU/Linux User: 302090: http://counter.li.org
Non autorizzo la memorizzazione del mio indirizzo su outlook
#include <iostream>
#include <new>
#include <stdio.h>
#include <string.h>

#define DEFAULT_MEMORY_TARGET 0

using namespace std;

static unsigned long int
get_memory_target (void)
{
  FILE *f;

  /* Really simple "get amount of memory on the machine" if it
   * doesn't work, you just get the default memory target.
   */
  f = fopen("/proc/meminfo", "r");
  if (!f)
    return DEFAULT_MEMORY_TARGET;

  while (!feof(f))
    {
      char line_buffer[1024];
      unsigned long int mem_total;
      if (fscanf(f, "MemAvailable: %u", &mem_total) == 1)
        {
          fclose(f);
          return( mem_total * 1024 * 9 / 10);
        }
      /* Skip to the next line and discard what we read */
      if (fgets(line_buffer, sizeof(line_buffer), f) == NULL)
        break;
    }

  fclose(f);

  return DEFAULT_MEMORY_TARGET;
}

int main( void )
{
unsigned long int TotMem = 0;
char *Buffer;

TotMem = get_memory_target();

if( TotMem == 0 )
 {
 cout << "Error reading memory";
 return 1;
 }

Buffer = new (std::nothrow) char[TotMem];

if( Buffer == NULL )
 {
 cout << "Error allocation " << TotMem << " memory";
 return 1;
 }

memset( Buffer, '-', TotMem-1 );

cout << "Nearly all the free RAM has been allocated (" << TotMem << " bytes). Press Ctrl-Alf-Shift-r to see the error and have a X crash... ATTENTION: you will lose all your not saved work!";

cout << "Elsewhere... press Enter key to stop and free the RAM";

string str;

getline( cin, str );

delete[] Buffer;

}

Rispondere a