उबंटू में क्रॉन जॉब सेट है जो पुराने 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 मिनट का समय निकाल दिया, इसलिए एक सफाई काम दो बार आकार आधे से अधिक बार चलता है (आप देख सकते हैं कि चोटियों को दो बार चौड़ा और आधे के रूप में अक्सर मिलता है)।
यहाँ IO समय के लिए इसी ग्राफ हैं:
और डिस्क संचालन:
चरम पर जहां लगभग 14,000 सत्र सक्रिय थे, सफाई को पूरे 25 मिनट तक चलाने के लिए देखा जा सकता है, जाहिरा तौर पर सीपीयू के एक कोर के 100% का उपयोग करके और पूरी अवधि के लिए डिस्क आईओ का 100% लगता है। यह इतना गहन संसाधन क्यों है? एक ls
सत्र निर्देशिका की /var/lib/php5
एक दूसरी मात्र एक अंश लेता है। तो पुराने सत्रों को ट्रिम करने में पूरे 25 मिनट क्यों लगते हैं? क्या ऐसा कुछ है जो मैं इसे तेज कर सकता हूं?
इस उपकरण के लिए फाइलसिस्टम वर्तमान में ext4 है, जो Ubuntu Precise 12.04 64-बिट पर चल रहा है।
संपादित करें: मुझे संदेह है कि लोड असामान्य प्रक्रिया "फ्यूज़र" के कारण है (क्योंकि मैं एक सरल rm
होने की उम्मीद करता हूं कि मैं जिस प्रदर्शन को देख रहा हूं, उससे भी तेज गति से लहराता हूं)। मैं फ्यूज़र का उपयोग हटाने जा रहा हूं और देखता हूं कि क्या होता है।