GNU/Linux >> Linux Esercitazione >  >> Linux

Come impedire lo scambio di un programma specifico?

Penso che il problema del singhiozzo non sia necessariamente causato dallo scambio. Se un programma sta riproducendo qualcosa, Linux dovrebbe notarlo e non scambiarlo. I programmi che non fanno molto sono i primi che vengono scambiati. Puoi verificare se il programma viene realmente scambiato guardando il RSS /RES campo da ps o in alto . RSS è la dimensione del set residente, la memoria fisica non scambiata utilizzata da un'attività (in kiloByte).

Penso che il tuo problema sia molto probabilmente causato da una pianificazione impropria della CPU e dell'I / O e da un po 'di inefficienza di Rhythmbox che lo rende sensibile ai carichi di sistema elevati. La priorità della CPU può essere modificata con i comandi nice e renice . La priorità I/O può essere modificata con ionice comando. Solo il super utente può utilizzare priorità alte. Dovresti anche sapere che i ragazzi del kernel Linux stanno cercando di migliorare la reattività dei sistemi desktop con varie patch a bassa latenza, quindi potresti considerare di usarle. Uno di questi è una patch di circa 200 righe scritta da Mike Galbraith che ha impressionato anche Linus. L'alternativa a questa patch è il trucco cgroups di Lennart Poettering che penso sarà l'impostazione predefinita in Fedora 15.

Ad ogni modo, senza quelle patch ci sono due opzioni:avviare il programma con una priorità alta o cambiarlo in seguito. Per la prima opzione puoi usare uno script wrapper attorno a Rhythmbox:

#!/bin/sh
# Run Rhytmbox with high CPU and I/O priorities
nice -n -10 ionice -c 1 -n 1 su -l -c rhythmbox alexei

Dovrai eseguirlo come root. Se non vuoi accedere come root solo per iniziare, puoi usare su o sudo .

Per quanto riguarda la modifica successiva della priorità, se sei troppo pigro per accedere come root per modificarla, puoi provare a utilizzare un cron job che viene eseguito ogni 5 minuti e imposta la priorità del rhythmbox processo, ma non consiglierei di farlo:

#!/bin/sh
renice -n -10 -p `pidof rhythmbox`
ionice -c 1 -n 1 -p `pidof rhythmbox`

Risposta breve:non puoi e non dovresti.

Molto tempo fa i file eseguibili onoravano lo sticky bit +t che direbbe al kernel di non scambiare, ma oggi viene ignorato.

Se il kernel decide che deve eseguire lo scambio, ha sicuramente un motivo valido. Linux è molto aggressivo sull'utilizzo della memoria, perché la RAM inattiva è una risorsa sprecata.

Se davvero non vuoi scambiare, prendi più RAM o solo # swapoff -a (non consigliato, può rendere il tuo sistema inutilizzabile se hai già problemi).

Shouldn't va quando stai sviluppando un'app e non vuoi che si scambi affatto. Dai un'occhiata a questo post su StackOverflow.


Ci sono diversi modi per farlo. Puoi provare a "dire" che Linux funziona meno con lo scambio (generalmente):

echo 10 > /proc/sys/vm/swappiness

Da:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

swappiness

Questo controllo è usato per definire quanto aggressivamente il kernel scambierà le pagine di memoria. Valori più alti aumenteranno l'aggressività, valori più bassi diminuiranno la quantità di scambio.

Il valore predefinito è 60.

Un'altra opzione è utilizzare il gestore del kernel di cgroups, questo è specifico per processo ma avrai del "lavoro" da fare:Risposta qui:https://unix.stackexchange.com/questions/10214/per-process-swapiness-for -linux#10227


Linux
  1. Come escludere directory specifiche dalla copia in Linux

  2. Come installare pacchetti da un repository specifico in Linux

  3. Come rendere eseguibile un programma da qualsiasi luogo?

  4. Journalctl:come impedire il troncamento del testo nel terminale?

  5. Come impedire agli utenti sudo di eseguire comandi specifici?

Come costruire il kernel Linux da zero {Guida passo passo}

Come installare un programma da Source su Linux

Come costruire il kernel Linux da zero

Come rimuovere Swap Space da Centos 7.x?

Come compilare il kernel Linux dal sorgente per creare un kernel personalizzato

Come impedire ai messaggi del kernel di inondare la mia console?