In den Kommentaren schlug ich vor, dass Sie eine cgroup erstellen, memory.swappiness
auf Null setzen (um das Austauschen zu minimieren) und Ihre Anwendung darin ausführen. Wenn Sie dies tun würden, würde Ihre Anwendung wahrscheinlich nicht ausgetauscht, wenn Sie nicht so wenig physischen Speicher hätten, dass das Austauschen von Seiten gegen Programme in dieser Gruppe die einzige Möglichkeit wäre, genügend physischen Speicher zur Verfügung zu stellen.
So tun Sie dies auf RHEL 6.5:
Stellen Sie sicher, dass das libcgroup
Paket installiert ist. Dadurch erhalten Sie Zugriff auf Userspace-Tools wie cgcreate
und cgexec
.
Starten und aktivieren Sie den cgconfig
Dienst, damit die Änderungen an der cgroup-Konfiguration zwischen den Neustarts erhalten bleiben. Unter RHEL sollte dieser Dienst auch die erforderlichen Dateisysteme unter dem /cgroup
Baum bereitstellen .
Erstellen Sie die cgroup mit cgcreate -g memory:thunderbird
Setzen Sie swappiness in dieser Gruppe mit auf Null cgset -r memory.swappiness=0 thunderbird
Verwenden Sie cgsnapshot -s > /etc/cgconfig.conf
diese Option , um eine aktualisierte persistente Konfiguration für den cgconfig
Dienst zu speichern (alle Änderungen waren bisher Laufzeitänderungen. Möglicherweise möchten Sie die Standardkonfigurationsdatei irgendwo speichern und erneut ausführen, bevor Sie sie zur persistenten Konfiguration machen.
Sie können jetzt die cgexec
gewünschten Anwendungen innerhalb der thunderbird
cgroup starten:
[root @ xxx601 ~] # cgexec -g Speicher: Thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c ssl-build stack test
[root @ xxx601 ~] #
Ich habe nicht thunderbird
wirklich installiert, sonst hätte ich das getan. Ich bin mir nicht sicher, warum die Formatierung der oben genannten fehlerhaft ist.
Eine Alternative dazu cgexec
wäre, Thunderbird zu starten und die PID zur tasks
Datei für die Anwendung hinzuzufügen . Beispielsweise:
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / task
[root @ xxx601 ~] # pidof httpd
25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109
[root @ xxx601 ~] # echo 25926> / cgroup / memory / thunderbird / task
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / task
25926
Auch hier ist zu erwähnen, dass dies das Austauschen technisch nicht verhindert, aber ohne die Anwendung selbst zu ändern, wahrscheinlich die beste Wahl ist. Ich habe gerade herausgefunden memory.memsw.limit_in_bytes
, dass es eine direktere Kontrolle zu sein scheint, wenn es darum geht, kein Tauschen zu erzwingen, aber ich habe nicht genug damit herumgespielt, um mich wirklich wohl zu fühlen und zu sagen, dass es Ihr Problem vollständig behebt. Das heißt, es könnte etwas sein, um das man sich kümmern muss.
Die eigentliche Antwort wäre, über anwendungssensible mlock
Informationen zu verfügen , um diese Art von Bedenken zu umgehen. Ich bin bereit zu wetten, dass eine Anwendung wie Thunderbird dies tut, aber ich weiß nicht genug über die Interna, um dies zu kommentieren.
cgexec
Thunderbird hinein. Sie benötigen noch Root-Zugriff, aber das ist die Auflösung auf Administratorebene. Wenn Sie Ihre eigene Anwendung entwickeln, würden Sie mlock verwenden .