Vor ein paar Tagen bemerkte ich ein Warten auf die Festplatten-E / A und einen Rückgang der Festplattenaktivität (was großartig war). Dann bemerke ich auch, dass mein Cache voll (*) und fragmentiert war. Dann habe ich den Cache geleert. Danach sprangen die Festplattenlatenz und die Festplattenaktivität auf die vorherige Stufe (was schlecht war).
IOtop zeigt, dass [jbd2 / sda2-8] und [flush-8: 00] immer über der Festplattennutzung liegen. Dies ist ein Dell R210, Hardware-RAID 1 (H200) mit viel freiem Speicher (insgesamt 16 GB, davon ca. 8 GB Puffer / Cache).
(*) Der Cache ist ein APC-Opcode-Cache für PHP, der den Festplattenzugriff für die Ausführung von PHP-Skripten reduziert. Der Cache war voll und fragmentiert, da er Dateien aus der Entwicklungsinstanz enthielt. Als ich das bemerkte, habe ich sie herausgefiltert.
Die Frage ist: Warum nimmt die Festplatten-E / A zu, wenn sie theoretisch abnehmen sollte? Unten sind einige Grafiken von Munin. Der Cache war vom 6. bis 8. Februar voll.
Ändern Sie, nachdem ich apc.mmap_file_mask auskommentiert habe, wie von @ cyberx86 mitgeteilt
Und nach ein paar Tagen /server//a/362152/88934
quelle
apc.mmap_file_mask=/tmp/apc.XXXXXX
), wird möglicherweise eine erhöhte E / A angezeigt. Versuchen Sie,apc.mmap_file_mask
den gemeinsamen Speicher (z. B./apc.shm.XXXXXX
) oder/dev/zero
(anonymer zugeordneter Speicher) zu verwenden.Antworten:
Wenn Sie eine dateibasierte Speicherzuordnung verwenden (z. B.
apc.mmap_file_mask=/tmp/apc.XXXXXX
), wird möglicherweise eine erhöhte E / A angezeigt.Versuchen Sie,
apc.mmap_file_mask
den gemeinsamen Speicher (z. B./apc.shm.XXXXXX
) oder/dev/zero
(anonymer zugeordneter Speicher) zu verwenden. Wenn Sie die Einstellung undefiniert lassen, wird standardmäßig ein anonymer zugeordneter Speicher verwendet.Normalerweise sind zugeordnete Dateien eine großartige Sache:
Im Vergleich zum Speichern von Daten nur im Speicher fallen jedoch zusätzliche E / A an - erheblich, wenn sich die Datei ständig ändert. Der Nachteil, keine zugeordneten Dateien zu verwenden, ist ein Mangel an Persistenz - Ihr Cache überlebt einen Neustart nicht, da er nur im Speicher gespeichert wird.
Man kann daher vorschlagen, dass der Cache, während er sich füllte und stabilisierte, die meisten Änderungen durchlief, die ständig auf die Festplatte geschrieben werden mussten; Sobald der Cache voll war, verlangsamte der ttl für jedes Objekt die Rate, mit der Daten im Cache umgedreht wurden, wodurch die Änderung verringert und das Schreiben von Datenträgern verringert wurde.
quelle
Nach ein paar Tagen möchte ich nun mit einigen Grafiken zurückkommen. Die Änderung verbessert diese Situation erheblich. Es reduziert alles außer der E / A-Servicezeit (ich denke, das liegt daran, dass keine trivialen kleinen PHP-Dateien mehr gelesen werden, was billig ist).
Die Serverlast (es war schon ziemlich niedrig, also hatte ich die Änderung nicht entdeckt).
quelle
apc.mmap_file_mask=/tmp/apc.XXXXXX