অ্যাপাচি টমক্যাট 300 সংযোগের পরে গলা টিপে


16

ইসি 2 তে হোস্ট টমক্যাটের সামনে আমাদের অ্যাপাচি ওয়েবসার্ভার রয়েছে, উদাহরণের ধরণটি 34 জিবি মেমরির সাথে অতিরিক্ত বড় extra

আমাদের অ্যাপ্লিকেশনটি প্রচুর বহিরাগত ওয়েবসার্চেস নিয়ে কাজ করে এবং আমাদের কাছে খুব লাস্যময় বাহ্যিক ওয়েব সার্ভিস রয়েছে যা শিখর সময়গুলিতে অনুরোধগুলির প্রতিক্রিয়া জানাতে প্রায় 300 সেকেন্ড সময় নেয়।

পিক আওয়ারের সময় সার্ভারটি প্রায় 300 টিপিডিডি প্রসেসে কমে যায়। PS -ef | গ্রেপ httpd | wc -l = 300

আমি গুগল করেছি এবং অনেক পরামর্শ পেয়েছি কিন্তু কিছুই কাজ করছে বলে মনে হচ্ছে না ... নীচে আমি কিছু কনফিগারেশন করেছি যা সরাসরি অনলাইন সংস্থান থেকে নেওয়া হয়েছে।

আমি অ্যাপাচি এবং টমক্যাট উভয় ক্ষেত্রে সর্বাধিক সংযোগ এবং সর্বাধিক ক্লায়েন্টের সীমা বাড়িয়েছি। কনফিগারেশন বিশদ এখানে:

// Apache

   <IfModule prefork.c>
    StartServers 100
    MinSpareServers 10
    MaxSpareServers 10
    ServerLimit 50000
    MaxClients 50000
    MaxRequestsPerChild 2000
    </IfModule>

// হুল বিড়াল

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="600000"
           redirectPort="8443"
           enableLookups="false" maxThreads="1500"
           compressableMimeType="text/html,text/xml,text/plain,text/css,application/x-javascript,text/vnd.wap.wml,text/vnd.wap.wmlscript,application/xhtml+xml,application/xml-dtd,application/xslt+xml"
           compression="on"/>

//Sysctl.conf

 net.ipv4.tcp_tw_reuse=1
 net.ipv4.tcp_tw_recycle=1
 fs.file-max = 5049800
 vm.min_free_kbytes = 204800
 vm.page-cluster = 20
 vm.swappiness = 90
 net.ipv4.tcp_rfc1337=1
 net.ipv4.tcp_max_orphans = 65536
 net.ipv4.ip_local_port_range = 5000 65000
 net.core.somaxconn = 1024

আমি অনেক পরামর্শ চেষ্টা করে যাচ্ছি কিন্তু নিরর্থক .. এটি কীভাবে ঠিক করব? আমি নিশ্চিত যে এম 2 এক্স্লারেজ সার্ভারের 300 এর বেশি অনুরোধ করা উচিত, সম্ভবত আমি আমার কনফিগারেশনে ভুল হয়ে যাচ্ছি ..

সার্ভারটি কেবল শিখর সময়গুলিতে চোক হয়ে যায় এবং যখন 300 টি সমবর্তী অনুরোধগুলি থাকে তবে [300 দ্বিতীয় বিলম্বিত] ওয়েবসার্ভিস সাড়া দেওয়ার জন্য অপেক্ষা করে।

আমি কেবল নেটস্ট্যাট দিয়ে টিসিপি সংযোগগুলি পর্যবেক্ষণ করছিলাম

আমি TIME_WAIT রাজ্যে প্রায় 1000 সংযোগ পেয়েছি, পারফরম্যান্সের দিক থেকে এর অর্থ কী হবে জানি না, আমি নিশ্চিত এটি অবশ্যই সমস্যাটিতে যুক্ত হবে।

TOP এর আউটপুট

 8902  root      25   0 19.6g 3.0g  12m S  3.3  8.8  13:35.77 java
 24907 membase   25   0  753m 634m 2528 S  2.7  1.8 285:18.88 beam.smp
 24999 membase   15   0  266m 121m 3160 S  0.7  0.3  51:30.37 memcached
 27578 apache    15   0  230m 6300 1536 S  0.7  0.0   0:00.03 httpd
 28551 root      15   0 11124 1492  892 R  0.3  0.0   0:00.25 top


 Output of free -m
 total       used       free     shared    buffers    cached
 35007       8470       26536    0          1         61
 8407        26599
 15999       15         15984

 output of iostat
 avg-cpu:  %user   %nice %system %iowait  %steal   %idle
      26.21    0.00    0.48    0.13    0.02   73.15

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda1             14.36         4.77       329.37    9005402  622367592
sdb               0.00         0.00         0.00       1210         48

এছাড়াও শিখর সময়ে মেমবেস সার্ভারের সাথে প্রায় 10-15k টিসিপি সংযোগ রয়েছে [স্থানীয়]

মোডজকের লগে কিছু ত্রুটি, আমি আশা করি এটি এই বিষয়ে কিছুটা আলোকপাত করে ..

[Wed Jul 11 14:39:10.853 2012] [8365:46912560456400] [error]         ajp_send_request::jk_ajp_common.c (1630): (tom2) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=110)
[Wed Jul 11 14:39:18.627 2012] [8322:46912560456400] [error] ajp_send_request::jk_ajp_common.c (1630): (tom2) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=110)
[Wed Jul 11 14:39:21.358 2012] [8351:46912560456400] [error] ajp_get_reply::jk_ajp_common.c (2118): (tom1) Tomcat is down or refused connection. No response has been sent to the client (yet)
[Wed Jul 11 14:39:22.640 2012] [8348:46912560456400] [error] ajp_get_reply::jk_ajp_common.c (2118): (tom1) Tomcat is down or refused connection. No response has been sent to the client (yet)

~

Worker.properties
workers.tomcat_home=/usr/local/tomcat/
worker.list=loadbalancer
worker.tom1.port=8009
worker.tom1.host=localhost
worker.tom1.type=ajp13
worker.tom1.socket_keepalive=True
worker.tom1.connection_pool_timeout=600
worker.tom2.port=8109
worker.tom2.host=localhost
worker.tom2.type=ajp13
worker.tom2.socket_keepalive=True
worker.tom2.connection_pool_timeout=600
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tom1,tom2
worker.loadbalancer.sticky_session=True
worker.tom1.lbfactor=1
worker.tom1.socket_timeout=600
worker.tom2.lbfactor=1
worker.tom2.socket_timeout=600

// মীমাংসিত

আপনার মূল্যবান পরামর্শের জন্য সকলকে ধন্যবাদ জানাই .. আমি এজেপি ১.৩ সংযোগকারীর জন্য ম্যাক্সথ্রেডস সেটিংসটি মিস করেছি Now এখন সবকিছুই নিয়ন্ত্রণে রয়েছে বলে মনে হচ্ছে।

আমি এমনকি এনজিএনএক্স এর মতো ভিত্তিক সার্ভারগুলিও দেখতে শুরু করব।


আপনার কিপালাইভ সেটিংস কেমন?
টম ও'কনোর

কোনও পৃষ্ঠা লোড করার চেষ্টা করার সময় ক্লায়েন্টরা কী ধরনের ত্রুটি ফিরে পাবে?
শেন ম্যাডেন

1
আপনি কি অ্যাপাচি / httpd ব্যবহারকারীর জন্য সর্বাধিক অনুমোদিত ওপেন ফাইল বিবরণ বৃদ্ধি করেছেন?
গোলজা

@ টম মাই কিপ লাইভ সেটিংস হ'ল ক্যাপএলাইভটাইমআউট 10 টি httpd.conf
জন

3
topএই সময়ের মধ্যে আউটপুট দেখতে কেমন? কীভাবে free -m? আর শেষ পর্যন্ত iostat?
জিফার

উত্তর:


13

আপনি 8009 বন্দরে এজেপি 1.3 সংযোগকারীটিতে ম্যাক্সথ্রেডগুলি বাড়িয়েছেন?


টমক্যাট প্রতি মুহূর্তে আমার কাছে 1500 রয়েছে
জন তিতাস

@ জোহান, আপনি কি বলছেন যে প্রতিটি সংযোজকের জন্য আপনি ম্যাক্সথ্রেড = "1500" নির্দিষ্ট করেছেন? আপনি কি এজেপি 1.3 সংযোগকারী (পোর্ট 8009) এর জন্য আপনার স্তন পোস্ট করতে পারেন?
HTTP500

এটি দেখানোর জন্য ধন্যবাদ .. এজেপি 1.3-এর জন্য কোনও ম্যাক্সথ্রেডস সেটিং নেই .. এই কারণটি কি হতে পারে?
জন তিতাস

1
হ্যাঁ, Conn সংযোগকারীটির জন্য স্তরে ম্যাক্সথ্রেডগুলি যুক্ত করুন। ডিফল্ট 200.
HTTP500

6

অ্যাপাচির মতো nginxবা lighttpdসামনে একটি অ্যাসিনক্রোনাস প্রক্সিং ওয়েব সার্ভার স্থাপনের বিষয়টি বিবেচনা করুন । অ্যাপাচি সমকালীনভাবে সামগ্রী পরিবেশন করে তাই ক্লায়েন্টরা সম্পূর্ণরূপে উত্পন্ন সামগ্রী ডাউনলোড না করা পর্যন্ত শ্রমিকরা অবরুদ্ধ থাকে (আরও বিশদ এখানে )। একটি অ্যাসিনক্রোনাস (অ-ব্লকিং) প্রক্সি স্থাপন করা সাধারণত পরিস্থিতি নাটকীয়ভাবে উন্নত করে (আমি সামনের দিকে চলমান অ্যাপাচি কর্মীদের সংখ্যা 30 থেকে 3-5 থেকে nginxফ্রন্টএন্ড প্রক্সি হিসাবে ব্যবহার করে কমিয়ে দিতাম )।


5

আমি সন্দেহ করি যে আপনার সমস্যা আপনি যেভাবে দেখিয়েছেন লগ থেকে, অ্যাপাচি নয় টমকটে রয়েছে। আপনি যখন 'ত্রুটি ১১০' পেয়ে আবার টমকাটের সাথে সংযোগ স্থাপনের চেষ্টা করছেন তখন এটি ইঙ্গিত দেয় যে আপনাকে পরিবেশন করার জন্য অপেক্ষা করা সংযোগগুলির একটি সারি পেয়ে গেছে যে টমক্যাটে শোনার সকেটের জন্য শোনার ব্যাকলগ সেটআপে আর কোনও ফিট হতে পারে না।

From the listen manpage:
   The  backlog  parameter defines the maximum length the queue of pending 
   connections may grow to.  If a connection request arrives with
   the queue full the client may receive an error with an indication
   of ECONNREFUSED or, if the underlying protocol supports  
   retransmission, the request may be ignored so that retries succeed.

যদি আমার অনুমান করতে হয় তবে আমি সন্দেহ করব যে সার্ভারটি "দমবন্ধ" করা যখন বেশিরভাগ এইচটিটিপি অনুরোধগুলি টমক্যাট থেকে কিছু ফিরে আসার অপেক্ষায় অবরুদ্ধ থাকে। আমি বাজি ধরছি যদি আপনি কিছু স্ট্যাটিক সামগ্রী আনার চেষ্টা করেন যা সরাসরি অ্যাপাচি দ্বারা পরিবেশন করা হয় (টমক্যাট প্রক্সির চেয়ে বরং) যে এটি সাধারণত 'দমবন্ধ' করার পরেও কাজ করবে।

দুর্ভাগ্যক্রমে আমি টমকাটের সাথে পরিচিত নই, তবে এর পরিবর্তে এর একযোগিতাপূর্ণ সেটিংস হস্তক্ষেপ করার কোনও উপায় আছে কি?

ওহ, এবং আপনার কাছে সম্ভাবনা যে তার বাইরের নেটওয়ার্ক পরিসেবা না না সংযোগের সংখ্যা সীমিত বিবেচনা করতে প্রয়োজন হতে পারে এটা করছে আপনাকে 300 নিচে, তাই এটি কোনো পার্থক্য কত সম্পাতবিন্দু সাধিত আপনি আপনার সামনের দিকে করছো তোলে যদি আপনি ব্যবহারিকভাবে প্রতিটি সংযোগ বাইরের ওয়েব পরিষেবাদি প্রতিক্রিয়া উপর নির্ভর করে।

আপনার একটি মন্তব্যে আপনি উল্লেখ করেছেন ডেটা 2 মিনিটের পরে বাসি হয়ে যায়। আপনি বাহ্যিক ওয়েব পরিষেবায় চালাচ্ছেন একত্রে সংযোগের পরিমাণ হ্রাস করতে আপনি এই পরিষেবাটি থেকে দুই মিনিটের জন্য যে প্রতিক্রিয়াটি পেয়েছেন তা ক্যাশে করার পরামর্শ দেব।


2

এটি সমস্যার সমাধানের প্রথম পদক্ষেপটি অ্যাপাচের মোড_স্ট্যাটাসকে সক্ষম করে এবং এর প্রতিবেদনটি অধ্যয়ন করছে - যতক্ষণ না আপনি এটি করেন না, বাস্তবে আপনি অন্ধভাবে হাঁটছেন। এটা ধার্মিক নয়। ;-)

দ্বিতীয়টি উল্লেখ করার মতো বিষয় (আমি নিজেরাই জিজ্ঞাসা করি না এমন প্রশ্নের উত্তর জানাতে পছন্দ করি না, তবে ...) আরও দক্ষ এবং বিশেষ ফ্রন্ট-এন্ড সার্ভারগুলি ব্যবহার করে nginx

এছাড়াও, আপনি ঠিক করেনি restartApache, বা শুধু gracefully থেকে পুনরায় লোড এটা? :)


অ্যাপাচি পুনরায় চালু হয়েছে .. একটি দৃষ্টিনন্দন পুনরায় লোড নয়
জন তিতাস

@ জোহান্টিটাস, ভাল mod_status, যাইহোক, আপনার বন্ধু। :)
পোজ

1

যেকোন ধরণের এন্টারপ্রাইজ-ওয়াই মোতায়েনের জন্য, প্রিফার্ক এমপিএমটি আপনি করতে পারেন এমন সবচেয়ে খারাপ পছন্দ সম্পর্কে: এটি কারও ব্যবসায়ের মতো সংস্থানগুলিকে গ্যাবল করে তোলে এবং থ্রেডগুলি পুনরায় আর্ট করা অন্যান্য এমপিএমের তুলনায় আরও বেশি সময় নেয়।

কমপক্ষে কর্মী MPM এ স্যুইচ করুন (অ্যাপাচি ২.২ এবং উপরে) বা - আরও ভাল - এটির ডিফল্ট ইভেন্ট এমপিএম সহ বর্তমান স্থিতিশীল সংস্করণ ২.৪.২ এ আপগ্রেড করুন ।

এই উভয়ই খুব সামান্য ওভারহেড সহ সহজেই সহস্র সাম্প্রতিক সংযোগগুলি পরিচালনা করবে।


ধন্যবাদ .. সে চেষ্টা করেও .. ভাগ্য নেই। TIME_WAIT সংযোগগুলি বাড়তে থাকে। সার্ভার 350 সংযোগে সাড়া দেওয়া বন্ধ করে দেয়
জন শিখর

1
আমি অসম্মতি জানাই যে এটি সবচেয়ে খারাপ পছন্দ - এটি এই প্রেক্ষাপটের জন্য একটি নিখুঁত পছন্দ এবং থ্রেডেড সার্ভারটি ব্যবহার করে সমস্যাগুলি লাঘব হওয়ার সম্ভাবনা রয়েছে তবে ইভেন্ট ভিত্তিক সার্ভার (এনজিনেক্স বা লাইটটিপিডি) ব্যবহার করার চেয়ে আরও ভাল সমাধান হতে পারে। ইভেন্ট ভিত্তিক অ্যাপাচি এন্টারপ্রাইজ মোতায়েন আইএমএইচও থেকে বিবেচনা করার জন্য যথেষ্ট পরিপক্ক নয়।
সিমসিবিয়ান

1

আমি জানি এটি একটি পুরানো গল্প, তবে আমার 2 টি মন্তব্য রয়েছে।

সার্ভারলিমিট ডাইরেক্টিভের জন্য একটি হার্ড কোডিং সীমা রয়েছেhttp://httpd.apache.org/docs/2.2/mod/mpm_common.html#serverlimit আপনি দেখতে পাবেন এটি সর্বোচ্চ 20000 / 200K।

সার্ভারে সংকলিত সার্ভারলিমিট 20000 এর একটি হার্ড সীমা রয়েছে (প্রিফার্ক এমপিএম 200000 এর জন্য)। এটি টাইপসের কারণে সৃষ্ট ন্যক্কারজনক প্রভাব এড়ানোর উদ্দেশ্যে করা হয়েছে।

দ্বিতীয়ত স্পষ্টতই নোডিবো উল্লেখ করেছেন যে এই 2 থেকে একজনের সেট করা খুব খারাপ ধারণা :

net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1

এর অর্থ আপনি তাড়াতাড়ি টাইমওয়েট পুনরায় ব্যবহার করুন, অনুমান কি? সার্ভারটি ভারী বোঝার অধীনে ভুল ক্লায়েন্টের সাথে কথা বলতে পারে।

আমি একটি খুব ভাল ব্যাখ্যা করলেন যে কিন্তু নিবন্ধ পাওয়া গেছে - এটা ফরাসি হয় ;-) http://vincent.bernat.im/fr/blog/2014-tcp-time-wait-state-linux.html


0

34 জিবি মেমরির অতিরিক্ত অতিরিক্ত large

বড় লোহা ওয়েবসার্ভিংকে স্কেল করার উপায় নয় আপনি কেবল বাধাটি ঘুরিয়ে নিচ্ছেন। তবে এমনকি এই অনেক স্মৃতি সহ, আমি সন্দেহ করি যে 50000 সংযোগগুলি সিস্টেমটি কী সক্ষম তা বিশেষভাবে চাপ দিচ্ছে যদি বিশেষত:

পিক আওয়ারের সময় সার্ভারটি প্রায় 300 টিপিডিডি প্রসেসে কমে যায়

আপনি যদি "সার্ভার চোকস" দ্বারা বোঝাতে চান তার অর্থ ব্যাখ্যা করেন তবে এটি সহায়ক হবে।

সংযোগের জন্য এ জাতীয় উচ্চ সীমা থাকা খুব হ'ল তবে হিস্টেরেসিসের জন্য খুব কম সীমাবদ্ধ (মিনিট / সর্বাধিক খুচরা সার্ভার)।

যদিও আপনি সরবরাহ করেছেন ত্রুটিগুলির নিষ্কাশনটি টেলটলেটি 'অনেকগুলি মুক্ত ফাইল' প্রদর্শন করে না তবে আমি ওপেন ফাইল বর্ণনাকারীর সংখ্যা এবং উলিমিট সেটিংস দেখে শুরু করব।


এতে সার্ভার চোকস যেমন সাধারণ এইচটিএমএল ফাইলগুলিতেও সাড়া দেয় না ..
জন শিরোনাম

আমি এখন সর্বোচ্চ সংখ্যাটি 3000 এ পরিবর্তন করেছি .. এখনও একই সমস্যা
জন শিরোনাম

0

সম্ভবত অ্যাপাচি ব্যবহারকারীর অনুমোদিত ফাইল হ্যান্ডলগুলি শেষ হয়ে গেছে? আপনি আপনার পোস্টে এগুলি উল্লেখ করেন নি। আপাকে বর্তমানে কতগুলি ফাইল পরিচালনা করতে দেওয়া হয়?


128192 ফাইল হ্যান্ডলগুলি
জন

0

এটি একটি মন্তব্যের মতো, তবে আমার খ্যাতি কম হিসাবে এটি করতে পারে না। @ জন টাইটাসের মতো ঠিক একই সমস্যাটি দেখা দিয়েছে।

MaxThreadsসমস্যাটি সমাধান করার জন্য আমরা এজেপি সংযোগকারীটিকে আমাদের অ্যাপাচি থ্রেড সীমাটির কাছাকাছি করেছিলাম ।

এটি পর্যবেক্ষণ করার জন্য, আমরা আমাদের এজেপি পোর্টে নেটস্প্যাট কমান্ডের SYN_SENT সাহায্যে নেটস্প্যাট পোর্টের স্থিতির সহায়তা চেয়েছিলাম।

netstat -an | grep :8102 | grep SYN_SENT | wc -l

এটি 0 এ নেমে গেছে, যা এজেপি সংযোগকারীটিতে ম্যাক্সথ্রেড সীমা নির্ধারণের আগে সর্বদা কিছু বড় সংখ্যা ছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.