PHP: कचरा संग्रह के लिए पहला परिचय

मुझे हाल ही में एक छोटी सी समस्या का सामना करना पड़ा: सत्र से डेटा बेतरतीब ढंग से गायब हो गया जब एक सत्र 24 से अधिक के लिए निष्क्रिय था (जैसा कि यह बाद में निकला) मिनट।

यहाँ मैनुअल ने मुझे क्या कहा है:
समाप्त सत्र वास्तव में 24 मिनट के तुरंत बाद नष्ट नहीं होते हैं। यहां बताया गया है कि यह सब कैसे होता है: सत्र का उपयोग करने वाले प्रत्येक अनुरोध की शुरुआत में ( सत्र_स्टार्ट () फ़ंक्शन या सेटिंग सत्र / ऑटो_स्टार्ट के लिए प्रारंभिक कॉल के कारण), 1% संभावना है कि PHP दुभाषिया सर्वर पर सभी सत्रों को स्कैन करेगा और किसी भी समाप्त सत्र को हटा देगा। कंप्यूटर प्रोग्राम के संबंध में "मैं" एक "अवसर" पूरी तरह से अप्रत्याशित लगता है। तो यह है। लेकिन ऐसी अप्रत्याशितता समग्र प्रदर्शन में सुधार करती है। सघन रूप से कार्य करने वाली साइट, उन्हें हटाने के लिए समाप्त सत्रों की खोज के साथ प्रत्येक अनुरोध के निष्पादन की शुरुआत में व्यस्त, कई सर्वर संसाधनों का उपभोग करेगा।

यह हटाए गए डेटा के "यादृच्छिकता" की व्याख्या करता है।
लेकिन इस समस्या को कैसे हल किया जाए, क्योंकि मेरी परियोजना में डाउनटाइम आसानी से 24 मिनट से अधिक हो सकता है।

फिर से हम मैनुअल की ओर मुड़ते हैं:
Session.gc_maxlifetime कॉन्फ़िगरेशन निर्देश सत्र गतिविधि को बनाए रखने के दौरान अनुरोधों के बीच अधिकतम निष्क्रिय समय की सेटिंग को नियंत्रित करता है। इसका डिफ़ॉल्ट मान 1440 है - 24 मिनट में बस कुछ सेकंड। आप सर्वर कॉन्फ़िगरेशन सेट करके या प्रोग्राम से सीधे ini_set () फ़ंक्शन को कॉल करके session.gc_maxlifetime का मान बदल सकते हैं। इस फ़ंक्शन के लिए कॉल सेशन_स्टार्ट () फ़ंक्शन पर कॉल करने से पहले होनी चाहिए।

ठीक है, अब सब कुछ इसके साथ स्पष्ट है, लेकिन मैं अभी भी इस दुर्भाग्यपूर्ण 1% संभावना के बारे में अधिक जानना चाहता हूं। यदि प्रोजेक्ट डेटा सत्र डेटा के लिए किसी भिन्न तर्क की आवश्यकता है, तो क्या यह संभव है कि किसी तरह इस मूल्य को बदल दिया जाए?
यदि आप सुनिश्चित अवधि समाप्त करना चाहते हैं, तो 1% संभावना पर भरोसा न करें। Session.gc_probability कॉन्फ़िगरेशन निर्देश अनुरोध प्रसंस्करण की शुरुआत में "हटाए गए सत्रों को हटाने" की शुरुआत की संभावना का प्रतिशत निर्धारित करता है। प्रत्येक अनुरोध को संसाधित करने की शुरुआत में इस प्रक्रिया को शुरू करने के लिए, निर्देश का मूल्य 100 पर सेट किया गया है। साथ ही साथ session.gc_maxlifetime के मामले में, ini_set () फ़ंक्शन को सत्र के मान को बदलने के लिए कॉल करें। gg_probability को पहले से सत्र_स्टार्ट () फ़ंक्शन के लिए कॉल करना चाहिए।

लेकिन, हमें याद है कि यदि आप संभावना मान को 100 पर सेट करते हैं, तो प्रत्येक अनुरोध से पहले पुराने सत्रों की खोज की जाएगी, जो प्रदर्शन को प्रभावित कर सकता है और सर्वर को अच्छी तरह से मोड़ सकता है।

मेरे मामले में, मुझे केवल सत्र डेटा हटाने से पहले डाउनटाइम को बढ़ाने की आवश्यकता है ताकि मुझे जिस डेटा की आवश्यकता हो वह मिटा न जाए। शायद अगर आपको अपनी परियोजना में सत्र डेटा के साथ अधिक कठोर काम करने की आवश्यकता है, तो आपको संभाव्यता और डाउनटाइम के आदर्श अनुपात का पता लगाना होगा।

मुझे उम्मीद है कि यह जानकारी किसी के लिए उपयोगी है ...

उपर्युक्त "मैनुअल" से लिंक करें: Phys.grsu.by/seti/doc/PHP/PHP5/g8_4.html

अद्यतन

अपने दम पर, मैं इस सत्र के बारे में भी जोड़ना चाहूंगा। gc_divisor निर्देश जो इस "मैनुअल" में नहीं माना गया था। डिफ़ॉल्ट रूप से, यह 100 है, और यह पता चला है कि session.gc_probability का मान वास्तव में% संभावना से मेल खाता है। वास्तव में, संभावना की गणना इस प्रकार की जाती है: gc_probability / gc_divisor । यानी मूल्यों के साथ:
gc_probability = 1
gc_divisor = 1000
संभावना पहले से ही 1% नहीं है, लेकिन 0.1% है

यह ध्यान दिया जाना चाहिए कि रूस में अधिकांश होस्टिंग प्रदाता (अपने सर्वर पर लोड को कम करने के लिए) इस अनुपात को निर्धारित करते हैं: 1/1000, जो बहुत कम संभावना देता है कि 24 मिनट के बाद (डिफ़ॉल्ट रूप से) डेटा अभी भी हटा दिया जाएगा। यदि आपको सत्र डेटा के साथ कड़ी मेहनत करने के लिए अपने एप्लिकेशन को कॉन्फ़िगर करने की आवश्यकता है तो ध्यान दें।

Source: https://habr.com/ru/post/In13248/


All Articles