আমি একটি এনগিনেক্স সার্ভার চালাচ্ছি যা এই প্রবাহের মতো ইউনিক্স সকেটের প্রক্সি হিসাবে কাজ করে:
upstream app_server {
server unix:/tmp/app.sock fail_timeout=0;
}
server {
listen ###.###.###.###;
server_name whatever.server;
root /web/root;
try_files $uri @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
}
কিছু অ্যাপ সার্ভার প্রক্রিয়াগুলি, পরিবর্তে, অনুরোধগুলি /tmp/app.sock
উপলভ্য হওয়ার সাথে সাথে টানুন । এখানে ব্যবহৃত বিশেষ অ্যাপ্লিকেশন সার্ভারটি ইউনিকর্ন, তবে আমি মনে করি না যে এটি এই প্রশ্নের সাথে প্রাসঙ্গিক।
সমস্যাটি হ'ল, এটি কেবলমাত্র মনে হয় যে নির্দিষ্ট পরিমাণ লোডের পরে, এনজিঙ্কস দ্রুত পর্যায়ে সকেটের মাধ্যমে অনুরোধগুলি পেতে পারে না। আমি কত অ্যাপ্লিকেশন সার্ভার প্রক্রিয়া সেট আপ করি তা বিবেচ্য নয়।
আমি এই বার্তাগুলির একটি প্লাবন পেয়ে যাচ্ছি এনগিনেক্স ত্রুটি লগতে:
connect() to unix:/tmp/app.sock failed (11: Resource temporarily unavailable) while connecting to upstream
অনেক অনুরোধের স্থিতি কোড 502 ফলাফল হয় এবং সেগুলি সম্পূর্ণ হতে দীর্ঘ সময় নেয় না। এনজিনেক্স রাইনের সারি স্ট্যাট 1000 এর আশেপাশে থাকে।
যাইহোক, আমার মনে হচ্ছে আমি এখানে স্পষ্ট কিছু মিস করছি, কারণ এনজিনেক্স এবং অ্যাপ সার্ভারের এই নির্দিষ্ট কনফিগারেশনটি খুব সাধারণ, বিশেষত ইউনিকর্নের ক্ষেত্রে (এটি বাস্তবে প্রস্তাবিত পদ্ধতি)। এখানে কি কোনও লিনাক্স কার্নেল বিকল্প আছে যা সেট করতে হবে, বা এনজিনেক্সে কিছু আছে? আপস্ট্রিম সকেটে কীভাবে থ্রুপুট বাড়ানো যায় সে সম্পর্কে কোনও ধারণা? এমন কিছু যা আমি স্পষ্টত ভুল করছি?
পরিবেশ সম্পর্কিত অতিরিক্ত তথ্য:
$ uname -a
Linux servername 2.6.35-32-server #67-Ubuntu SMP Mon Mar 5 21:13:25 UTC 2012 x86_64 GNU/Linux
$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
$ unicorn -v
unicorn v4.3.1
$ nginx -V
nginx version: nginx/1.2.1
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
TLS SNI support enabled
বর্তমান কার্নেল টুইটগুলি:
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_mem = 16777216 16777216 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.route.flush = 1
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_moderate_rcvbuf = 1
net.core.somaxconn = 8192
net.netfilter.nf_conntrack_max = 524288
Nginx ব্যবহারকারীর জন্য সেটিংস বাতিল করুন:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
ulimit -n
বলেছেন 65535
।
ulimit
বিশেষত খোলার ফাইলের আউটপুট পরীক্ষা করেছেন ?