Ubuntu memiliki pengaturan tugas cron yang mencari dan menghapus sesi PHP lama:
# Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] \
&& [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 \
-maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir \
fuser -s {} 2> /dev/null \; -delete
Masalah saya adalah bahwa proses ini memakan waktu sangat lama untuk dijalankan, dengan banyak IO disk. Inilah grafik penggunaan CPU saya:
Pembersihan berjalan diwakili oleh paku kecil. Pada awal periode, pekerjaan pembersihan PHP dijadwalkan pada waktu default 09 dan 39 menit. Pada pukul 15:00 saya menghapus waktu 39 menit dari cron, jadi pekerjaan pembersihan dua kali ukuran berjalan setengah sering (Anda dapat melihat puncak mendapatkan dua kali lebih lebar dan setengah sering).
Berikut adalah grafik yang sesuai untuk waktu IO:
Dan operasi disk:
Pada puncak di mana terdapat sekitar 14.000 sesi aktif, pembersihan dapat terlihat berjalan selama 25 menit penuh, tampaknya menggunakan 100% dari satu inti CPU dan apa yang tampaknya 100% dari disk IO untuk seluruh periode. Mengapa sumber daya begitu intensif? Sebuah ls
direktori sesi /var/lib/php5
hanya butuh sepersekian detik. Jadi mengapa perlu 25 menit penuh untuk memotong sesi lama? Apakah ada yang bisa saya lakukan untuk mempercepat ini?
Sistem file untuk perangkat ini saat ini adalah ext4, berjalan pada Ubuntu Precise 12.04 64-bit.
EDIT: Saya menduga bahwa beban ini disebabkan oleh proses "fuser" yang tidak biasa (karena saya berharap yang sederhana rm
menjadi pemandangan yang lebih cepat daripada kinerja yang saya lihat). Saya akan menghapus penggunaan fuser dan melihat apa yang terjadi.