Ubuntu มีการตั้งค่างาน cron ซึ่งค้นหาและลบเซสชัน PHP เก่า:
# 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
ปัญหาของฉันคือกระบวนการนี้ใช้เวลานานมากในการรันพร้อมดิสก์ IO จำนวนมาก นี่คือกราฟการใช้งาน CPU ของฉัน:
การล้างข้อมูลจะถูกแสดงด้วยเดือยแหลม เมื่อถึงต้นงวดงานการล้างข้อมูลของ PHP จะถูกกำหนดเวลาเริ่มต้นที่ 09 และ 39 นาที เวลา 15:00 น. ฉันลบเวลา 39 นาทีออกจาก cron ดังนั้นงานล้างข้อมูลสองครั้งขนาดจะทำงานครึ่งหนึ่งบ่อยครั้ง (คุณสามารถเห็นจุดสูงสุดกว้างสองเท่าและครึ่งบ่อยครั้ง)
นี่คือกราฟที่สอดคล้องกันสำหรับเวลา IO:
และการทำงานของดิสก์:
ที่จุดสูงสุดที่มีการใช้งานประมาณ 14,000 เซสชันการล้างข้อมูลสามารถเห็นได้ว่าทำงานเต็ม 25 นาทีซึ่งเห็นได้ชัดว่าใช้ 100% ของหนึ่งคอร์ของ CPU และสิ่งที่ดูเหมือนจะเป็น 100% ของดิสก์ IO ตลอดระยะเวลา เหตุใดทรัพยากรจึงเข้มข้นมาก ls
ไดเรกทอรีเซสชั่น/var/lib/php5
ใช้เวลาเพียงเศษเสี้ยวของวินาที เหตุใดจึงใช้เวลา 25 นาทีในการตัดแต่งเซสชันเก่า มีอะไรที่ฉันสามารถทำได้เพื่อเร่งความเร็วนี้หรือไม่?
ระบบไฟล์สำหรับอุปกรณ์นี้กำลัง ext4 ซึ่งทำงานบน Ubuntu Precise 12.04 64- บิต
แก้ไข: ฉันสงสัยว่าการโหลดนั้นเกิดจากกระบวนการ "ฟิวเซอร์" ที่ผิดปกติ (เนื่องจากฉันคาดว่าการrm
มองเห็นแบบง่าย ๆจะเร็วกว่าการแสดงที่ฉันเห็น) ฉันจะลบการใช้ฟิวเซอร์และดูว่าเกิดอะไรขึ้น