Nginx के साथ बहुत सारी खुली हुई फाइलें, सीमा को बढ़ाती नहीं दिख सकतीं


22

सर्वर Ubuntu 13.04 (GNU / Linux 3.9.3-x86_64-linode33 x86_64) है।

nginx nginx / 1.2.6 है।

मैं इस पर कई घंटों से काम कर रहा हूं, इसलिए यहां मुझे जो मिल रहा है और यहां मैंने किया है।

tail -f /usr/local/nginx/logs/error.log
2013/06/18 21:35:03 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:04 [crit] 3427#0: accept4() failed (24: Too many open files)
2013/06/18 21:35:05 [crit] 3426#0: accept4() failed (24: Too many open files)

नग्नेक्स चल रहा है:

geuis@localhost:~$ ps aux | grep nginx
root      3422  0.0  0.0  39292   380 ?        Ss   21:30   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    3423  3.7 18.8 238128 190848 ?       S    21:30   0:13 nginx: worker process      
nobody    3424  3.8 19.0 236972 192336 ?       S    21:30   0:13 nginx: worker process      
nobody    3426  3.6 19.0 235492 192192 ?       S    21:30   0:13 nginx: worker process      
nobody    3427  3.7 19.0 236228 192432 ?       S    21:30   0:13 nginx: worker process      
nobody    3428  0.0  0.0  39444   468 ?        S    21:30   0:00 nginx: cache manager process

/Etc/security/limits.conf में संशोधित सॉफ्ट / हार्ड सीमा (फ़ाइल के अंत से सेटिंग)

root soft  nofile 65536
root hard  nofile 65536

www-data soft nofile 65536
www-data hard nofile 65536

nobody soft nofile 65536
nobody hard nofile 65536

अधिकतम फ़ाइलों का एक पठन

cat /proc/sys/fs/file-max
500000

और /etc/pam.d/common-session में:

session required pam_limits.so

इसके साथ जोड़ा और सर्वर अच्छे उपाय के लिए फिर से शुरू हुआ, nginx के लिए मैं माता-पिता की पीआईडी ​​प्रक्रिया प्राप्त करके नरम / कठिन सीमाएं गिनता हूं:

cat /proc/<PID>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     

मूल प्रक्रिया 'मूल' के रूप में चलती है और 4 श्रमिक 'कोई नहीं' के रूप में चलते हैं।

root      2765  0.0  0.0  39292   388 ?        Ss   00:03   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    2766  3.3 17.8 235336 180564 ?       S    00:03   0:21 nginx: worker process      
nobody    2767  3.3 17.9 235432 181776 ?       S    00:03   0:21 nginx: worker process      
nobody    2769  3.4 17.9 236096 181524 ?       S    00:03   0:21 nginx: worker process      
nobody    2770  3.3 18.3 235288 185456 ?       S    00:03   0:21 nginx: worker process      
nobody    2771  0.0  0.0  39444   684 ?        S    00:03   0:00 nginx: cache manager process

मैंने वह सब कुछ करने की कोशिश की है जो मुझे पता है कि मुझे कैसे करना है और Google से प्राप्त करने में सक्षम है। मुझे nginx को बढ़ाने के लिए फ़ाइल की सीमा नहीं मिल सकती है।

मदद?

जवाबों:


32

अपने nginx में निम्न पंक्ति जोड़ें और प्रक्रिया को पुनरारंभ करें:

worker_rlimit_nofile 30000;

इससे श्रमिक अधिक फाइलों को ले सकेंगे। फिर आप इसके साथ सत्यापित कर सकते हैं:

su - nobody
ulimit -Hn
ulimit -Sn

यह नई हार्ड / सॉफ्ट लिमिट को आउटपुट करना चाहिए।

संदर्भ


6
यदि आप केवल worker_rlimit_nofileuWSGI सेटिंग को बदलते हैं, न कि सिस्टम लिमिट्स (जो मेरे लिए काम की है), तो आप इसे सत्यापित नहीं कर सकते ulimit। इसके बजाय, आपको सीधे देखना चाहिए /proc/<pid of worker>/limits
Jan Fabry

मुझे लगता है कि उपयोगकर्ता (कोई नहीं / www-डेटा) को लॉगआउट करना होगा और वापस अंदर यानी। सर्वर को पुनरारंभ करें। मेरे लिए ulimit यह दिखा रहा है कि इसकी वृद्धि हुई है, लेकिन यह प्रक्रिया अभी भी बिल्ली / proc / {pid} / सीमा के अनुसार सीमित है
felix

@felix ओपी ने उल्लेख किया कि उन्होंने सर्वर को पहले से ही पुनरारंभ कर दिया है, लेकिन हां, इसकी आवश्यकता है।
नाथन सी।

3

उबंटू में, /etc/pam.d/su को संपादित करें या पंक्ति सत्र की आवश्यकता pam_limits.so जोड़ें

इसके अलावा, /etc/security/limits.conf में यह सुनिश्चित करें कि आपके पास वर्णों के बीच TABS है न कि रिक्त स्थान।


1

सुनिश्चित करें कि आप उन फ़ाइलों को संपादित करने के बाद निम्नलिखित कमांड चलाते हैं

sysctl -p

फिर नग्नेक्स को पुनरारंभ करें


1
कोई प्रभाव नहीं है। सीमाएं वही रहीं।
गेउंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.