Come controllare l'utilizzo di RAM / swap


18

Esiste un modo (applicazione) per controllare la politica di utilizzo di RAM / swap a livello di applicazione.

Ho alcune applicazioni che uso sempre e voglio che rimangano sempre nella RAM e ci sono anche applicazioni che uso abbastanza di rado e potrebbero essere lanciate per scambiare su richiesta. So che le finestre configurate di default dovrebbero darmi le migliori prestazioni, ma voglio verificare se posso ottenere di più :).

Uso Windows 7.


2
+1. Sono interessato a un metodo che funziona per XP.
Xavierjazz,

Risposte:


9

Sì, c'è: chiedi al programma di chiamare la funzione VirtualLock :

Le pagine bloccate da un processo rimangono nella memoria fisica fino a quando il processo non le sblocca o termina. Queste pagine sono garantite per non essere scritte nel file di paging mentre sono bloccate.

Credo che la funzione SetProcessWorkingSetSize potrebbe anche essere utile.


Per quelle persone che pensano di essere un eretico anche solo per suggerire che questo potrebbe essere utile:

Si noti che possono esserci validi motivi per bloccare le pagine in memoria. Un motivo valido potrebbe essere che l'utente sta eseguendo un masterizzatore CD e il masterizzatore CD esegue costantemente le pagine e quindi provoca un buffer underrun, creando un sottobicchiere. In quella situazione, sarebbe valido bloccare i buffer di memoria in modo che non siano sottoposti a paging, anche se ciò significa che il resto del computer rallenta a una ricerca per indicizzazione, perché è comunque meglio che dare all'utente un sottobicchiere. Possono esserci anche altri motivi validi: il mio punto è, mentre di solito non è consigliabile bloccare pagine in memoria, esistono ancora situazioni valide e non penso che uccidere l'idea aiuterebbe l'OP qui.


Aggiornamento: Date un'occhiata a Process Hacker s' Reduce Working Setopzione di menu.


Forse citando questo bit dall'articolo lo metterebbe nel contesto: "Il blocco delle pagine in memoria può degradare le prestazioni del sistema riducendo la RAM disponibile e costringendo il sistema a scambiare altre pagine critiche nel file di paging. Ogni versione di Windows ha un limite al numero massimo di pagine che un processo può bloccare. Questo limite è intenzionalmente piccolo per evitare un grave peggioramento delle prestazioni ". (La mia enfasi)

1
@Randolph: non l'ho mai consigliato , ho appena detto che, a differenza di quanto la maggior parte delle altre persone sembrano pensare, è possibile . Personalmente odio solo dire all'OP "Let's kill your idea" - Penso che l'OP abbia capito che non dovrebbe farlo, ma se lo vuole ancora, penso che abbia il diritto di saperlo fare. (C'è una ragione per cui hanno creato queste funzioni e non sono io la persona che giudica se l'OP debba usarle o no.)
Mehrdad,

C'è molto codice in Windows lasciato per compatibilità con le versioni precedenti. Se c'è una ragione per averlo, sarebbe quello. Si potrebbe paragonarlo alla funzionalità Riduci in SQL Server, che non dovrebbe essere utilizzata in nessun caso, ma è stata lasciata in casa per motivi di compatibilità. Windows 7 è un sistema operativo moderno con una corretta gestione della memoria e il file di paging non deve essere eliminato, né i programmi dovrebbero cercare di rimanere in memoria al di fuori delle "regole". È una pratica molto scadente e può provocare un sistema instabile e / o inutilizzabile.

1
@Randolph: (Vedo che hai abbandonato l'analogia.:]) Crea un piccolo programma (non dovrebbe essere più di ~ 10 righe) per aprire l'altro processo e chiamare SetProcessWorkingSetSize. Questo è un modo. Se, naturalmente, se non sai cosa significhi perché non sei uno sviluppatore, ovviamente non c'è molto che puoi fare. Ma è ancora possibile e dire che è impossibile è ancora errato, richiede solo più conoscenza di quanto potrebbe avere l'OP.
Mehrdad,

1
@Randolph, puoi scaricare varie app freeware che obbligano tutte le app in esecuzione a passare al file di paging (chiamando SetProcessWorkingSetSize in ogni processo).
Chris O

5

L'unico modo che ho trovato è disabilitare il file di paging. Tuttavia non è una soluzione perfetta: riceverai messaggi di errore se ti avvicini o superi il limite della RAM e potrebbe non salvare correttamente i dump di arresto anomalo, quindi riattivalo se è necessario risolvere i problemi. Oltre a questo, ho usato Win7 senza file di paging per mesi senza intoppi.

La mia esperienza: ho avuto questo problema con un software per pianoforte (utilizzo di 1 GB di RAM) che sarebbe stato scambiato dopo non essere utilizzato per un po '. Suonare un tasto di piano poche ore dopo si tradurrebbe in un disordine glitch poiché lo swap non sarebbe ricaricato abbastanza velocemente per riprodurre il suono. (Metterei quindi tutto il braccio su ogni chiave per forzare una ricarica!)

Se la RAM è un problema, ti consiglio di acquistarne di più (ad es. Da 8 a 12 GB con Windows 7 x64). Per i coscienti di RAM, avere molta RAM è una manna dal cielo.

Ma prima, dovresti prendere in considerazione la possibilità di ottenere un'unità SSD e sostituirla. Accelererà notevolmente il recupero degli swap, oltre a fornire molti altri vantaggi del sistema. La RAM non offre vantaggi quando non viene utilizzata.


3
Fare. Non. Elimina. Il. Pagina. File. Mai.

7
Io ho. Conosci. Utilizzando. Win7. Con. No. File di paging. Per. Mesi. Senza. A. Hitch.
mtone,

1
Uso sempre Win7 senza file di paging in ogni momento, tuttavia mi sembra che potrebbe non essere sufficiente per il mio lavoro attuale :(
Darqer

3
@Randolph: MS sa di cosa sta parlando, perché sa che i suoi clienti non sono esattamente sempre professionisti del computer. Ma per quelle persone che sanno esattamente cosa fa e non fa il file di paging, non c'è motivo di costringerli a una pratica di cui non hanno bisogno.
Mehrdad,

2
@Randolph: se superi il limite di velocità senza una cintura di sicurezza, puoi morire e anche uccidere altre persone, per non parlare dell'aumento dei costi assicurativi per gli altri. Il peggio che può succedere se il tuo computer esce dalla memoria è che perderai solo un po 'di tempo, a seconda della situazione. Non vedi qualcosa di un po '(leggi: molto) sbagliato nell'analogia qui? Inoltre, hai usato Linux / Unix? Hai mai notato come ti danno più che abbastanza corda per appenderti, a differenza di Windows? Le persone li usano ancora - è come guidare sotto influenza o qualcosa del genere?
Mehrdad,

2

L'utilizzo del file di paging dipende da molti fattori. Se usi molti programmi e non hai abbastanza RAM per tutti allo stesso tempo, allora parti di essi (o tutti) potrebbero essere scambiate nel file di paging.

Se hai 4 GB di RAM e diciamo che circa 3 GB sono disponibili a causa di schede video e altri utenti delle risorse che bloccano parti di 4 GB e usi solo alcuni programmi che non occupano molta memoria, teoricamente tu non dovrebbe mai aver bisogno di un file di scambio. Tuttavia, Windows Vista e 7 sono notoriamente aggressivi nello scambio di programmi su disco.

Avevo un'impostazione che riduceva lo swappiness di Windows 7 (swappiness è un termine Linux ma si applica anche a Windows, e poiché esiste un'impostazione del registro per domare l'aggressività dello scambio di Windows sembra che Microsoft sia d'accordo a malincuore, anche se in un pozzo modo nascosto), ma non riesco più a trovarlo. La ricerca è come sono finito qui. La migliore alternativa a questa impostazione che ho trovato è quella di assicurarmi di utilizzare un file di scambio di dimensioni fisse (vado per 4096-4096 su sistemi operativi a 32 bit e 12 GB su quelli a 64 bit poiché ho 6 GB di RAM di sistema) su una partizione dedicata. Avendo un'unità di riserva da 20000 7200rpm, inserisco tutte le mie partizioni di swap (Windows XP, 7, 7 a 64 bit e vari Linux) su questa unità. Sembra funzionare per me, ma YMMV.


1

Vale la pena ricordare: quando Windows rileva che stai utilizzando frequentemente determinate applicazioni, il superfetch mette in memoria quelle app in modo che si caricino più velocemente. Penso che fidarsi di Windows per fare la sua cosa qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.