Ubuntu, eski PHP oturumlarını arayan ve silen bir cron işi ayarladı:
# 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
Benim sorunum, bu işlemin çok sayıda disk GÇ ile çalışması çok uzun sürüyor. İşte CPU kullanım grafiğim:
Temizleme çalışması deniz mavisi sivri uçlarıyla temsil edilir. Dönemin başında, PHP'nin temizleme işleri varsayılan 09 ve 39 dakika zamanlanmıştı. Saat 15:00 'da 39 dakikalık süreyi cron'dan kaldırdım, bu yüzden iki kat büyüklüğünde bir temizlik işi sık sık yarı işliyor (piklerin iki katı genişliğinde ve yarı sık sık olduğunu görebilirsiniz).
İşte IO zamanı için karşılık gelen grafikler:
Ve disk işlemleri:
Yaklaşık 14.000 oturumun aktif olduğu zirvede, temizlemenin tam olarak 25 dakika sürdüğü, görünüşe göre CPU'nun bir çekirdeğinin% 100'ünü ve tüm dönem boyunca disk IO'sunun% 100'ü gibi göründüğü görülebilir. Neden bu kadar kaynak yoğun? Bir ls
seans dizinin /var/lib/php5
saniyenin sadece bir kısmını alır. Öyleyse eski oturumları kesmek neden tam 25 dakika sürüyor? Bunu hızlandırmak için yapabileceğim bir şey var mı?
Bu aygıtın dosya sistemi şu anda ext4'tür ve Ubuntu Precise 12.04 64-bit üzerinde çalışmaktadır.
DÜZENLEME: Yükün olağandışı "kaynaştırıcı" işleminden kaynaklandığından şüpheleniyorum rm
. Kaynaştırıcı kullanımını kaldıracağım ve ne olacağını göreceğim.