VPN रिले SSH स्वीकारणे थांबवते: फाइल डिस्क्रिप्टर मर्यादा
टनलचा रहदारी वाहत राहतो, पण त्यामागील socat रिले नवीन सत्रे नाकारतो. मार्गाचा मागोवा घ्या, नंतर जिवंत PID वर वारशाने मिळालेली मर्यादा वाचा.
WireGuard हँडशेक अजूनही पूर्ण होतो, पीअर अजूनही अलीकडील एंडपॉइंट दाखवतो, आणि तरीही त्यामागील रिलेमधून नवीन SSH सत्र कोणत्याही बॅनरशिवाय लटकते। हे संयोजन टनलपासून दूर, सॉकेट स्वीकारणाऱ्या प्रक्रियेकडे निर्देश करते। socat सारखा रिले स्वतःच्या डिस्क्रिप्टर बजेटसह, स्वतःच्या मुलांसह आणि स्वतःच्या वारशाने मिळालेल्या मर्यादांसह अनुप्रयोगाच्या मार्गात बसतो। खालील प्रवास क्लायंटपासून सुरू होतो आणि दुसरे सॉकेट उघडू न शकणाऱ्या पहिल्या घटकावर थांबतो।
संख्या बदलण्यापूर्वी मार्गाचा मागोवा घ्या
संपूर्ण टनलबद्दल विचार करण्याऐवजी एका अयशस्वी विनंतीचा मागोवा घ्या। क्लायंट टनलमध्ये लिहितो, VPN डेमॉन डिक्रिप्ट आणि राउट करतो, आणि रिले दुसऱ्या बाजूला स्वीकारतो। प्रत्येक पायरी डिस्क्रिप्टर वापरते, आणि सहसा संपणारी शेवटची असते।
तुम्ही पुनरुत्पादित करू शकता अशा विनंतीपासून सुरुवात करा आणि तिची वेळ मोजा। TCP हँडशेक पूर्ण होतो पण अनुप्रयोगाचा बॅनर येत नाही, तर रिलेने सॉकेट घेतले आणि नंतर मुलामध्ये किंवा त्याच्या अपस्ट्रीम पायावर अडकले। हँडशेक स्वतःच कधीही पूर्ण होत नसेल, तर कारण राउटिंग, फायरवॉल किंवा श्रोत्याची स्थिती आहे, डिस्क्रिप्टरची कमाल मर्यादा नाही। दोन रूपांपैकी कोणते पाहिले ते नोंदवा, कारण ते वेगवेगळ्या प्रक्रियांकडे निर्देश करतात।
कामाची नक्कल करणाऱ्या उडींचीही गणना करा। फोर्किंग श्रोता प्रत्येक स्वीकारलेले सॉकेट स्वतःची प्रत ठेवणाऱ्या मुलाला देतो, म्हणून खरी बेरीज संपूर्ण वृक्षाची गुणधर्म आहे, केवळ पालकाची नाही।
रिलेला वारशाने मिळालेली मर्यादा वाचा
महत्त्वाची एकमेव मर्यादा चालू प्रक्रियेची आहे, आणि ती त्या प्रक्रियेला सुरू करणाऱ्या गोष्टीने ठरवली आहे। शेलमध्ये ulimit -n टाइप करणे शेलचे वर्णन करते। सेवा व्यवस्थापकाला काय लागू केले ते विचारा, नंतर PID वर पुष्टी करा।
systemctl show -p MainPID -p LimitNOFILE vpn-relay.service
cat /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
limits फाइल प्रक्रियेला दिसते तसे मऊ आणि कठोर कमाल मर्यादा छापते। उदार कठोर मूल्याखाली कमी मऊ मूल्य म्हणजे डेमॉनला स्वतःची कमाल मर्यादा वाढवण्याची परवानगी आहे, आणि काही स्टार्टअपला तसे करतात; समान कमी मूल्ये म्हणजे युनिट फाइल स्रोत आहे।
Drop-in शब्दकोश क्रमाने लोड होतात आणि नंतरच्या फाइल जिंकतात, म्हणून systemctl cat vpn-relay.service काय लागू होते याचे अधिकृत दृश्य आहे। व्यवस्थापक कधीही न वाचणारी फाइल संपादित करणे हे वाढवलेल्या संख्येचा परिणाम न होण्याचे सर्वात सामान्य कारण आहे।
स्थिर समवर्तीपणा टिकवलेल्या स्थितीपासून वेगळा करा
दोन प्रक्रिया असंबंधित कारणांमुळे एकाच कमाल मर्यादेपर्यंत पोहोचू शकतात, आणि उपाय वेगळे आहेत। उपयुक्त समवर्ती सत्रांचा मागोवा घेणारी मागणी क्षमतेचा प्रश्न आहे। काम संपल्यानंतरही सुरू राहणारी वाढ ही गळती किंवा कोणीही न बंद केलेल्या सत्रांचा संच आहे।
निष्क्रिय अवस्थेत, तुमच्या नेहमीच्या शिखरावर आणि भार थांबल्यानंतर काही मिनिटांनी पुन्हा मोजा। ls /proc/PID/fd | wc -l ने उघड्या नोंदी मऊ मर्यादेच्या तुलनेत मोजल्यास अंतर कळते, आणि कमाल मर्यादेपेक्षा एक-दोन कमी असलेली गणना हळू मार्ग नाही तर कठोर थांबा आहे।
गणना कमी होण्यास नकार देईल तेव्हा एकूणांऐवजी सॉकेट स्थिती पाहा। CLOSE_WAIT मध्ये बसलेले डिस्क्रिप्टर म्हणजे पीअरने बंद केले आणि तुमच्या बाजूने कधीही केले नाही, हा अनुप्रयोग जीवनचक्रातील दोष आहे जो मोठी मर्यादा केवळ पुढे ढकलते। मुलांचे मॉडेलही मर्यादित करा: समवर्ती मुलांवर मर्यादा नसलेला फोर्किंग रिले डिस्क्रिप्टर, प्रक्रिया स्लॉट आणि स्मृती एकत्र संपवतो।
जिवंत प्रक्रियेवर नवीन मूल्य तपासा
युनिट संपादित केल्यानंतर व्यवस्थापक पुन्हा लोड करा आणि सेवा पुन्हा सुरू करा, कारण केवळ पुन्हा लोड करणे चालू प्रक्रियेला आधीच वारशाने मिळालेल्या मर्यादा कधीही बदलत नाही। प्रत्यक्षात रहदारी सेवा देणाऱ्या प्रक्रियेवर पडताळणी करा।
systemctl daemon-reload
systemctl restart vpn-relay.service
awk '/Max open files/ {print}' /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
ss -tnp state established '( sport = :2222 )' | wc -l
awk ओळ नवीन जोडी परत देते; जर ती अजूनही जुनी दाखवत असेल, तर तुम्ही संपादित केलेला drop-in लोड होत नाही। ss गणना तुमची कामभार तपासणी आहे, म्हणून अपेक्षित सत्रसंख्या उघडा आणि ती वाढताना पाहा। ती सत्रे बंद झाल्यानंतरही वाढत राहणारी गणना म्हणजे मर्यादा कधीही संपूर्ण समस्या नव्हती।
कोणत्याही मोठ्या वाढीसोबत एक इशारा येतो। select() ने पोल करणाऱ्या अनुप्रयोगांना FD_SETSIZE वरील डिस्क्रिप्टर पाहता येत नाहीत, जे सामान्य बिल्डमध्ये 1024 आहे, म्हणून त्यापुढे वाढवलेली कमाल मर्यादा असंबंधित वाटणारे अपयश निर्माण करू शकते। systemd अंमलबजावणी संदर्भ आपल्या सुरू केलेल्या सेवांसाठी तोच इशारा देतो।
पुन्हा सुरू करणे टनलच्या उपलब्धतेपासून दूर ठेवा
रिले पुन्हा सुरू केल्याने त्याची सक्रिय सत्रे पडतात, आणि ती VPN खाली जाण्यापेक्षा वेगळी घटना आहे। रिले चक्र करत असताना टनल वर राहील अशा क्रमाने बदल लावा, आणि ज्याचे दीर्घकालीन सत्र ते ओलांडते त्याला इशारा द्या।
रोलबॅक म्हणजे मागील युनिट फाइल आणि आणखी एक पुन्हा सुरू करणे, आणि ती फाइल नवे मूल्य एक कामकाजाचा दिवस टिकेपर्यंत तिथेच राहते। नंतर मूळ अयशस्वी विनंतीने लूप बंद करा: रिलेमधून एक नवीन SSH सत्र, महत्त्वाचे होण्याइतके लांब एक हस्तांतरण, आणि निष्क्रिय पातळीवर परतणारी डिस्क्रिप्टर गणना।