অ্যাপাচি + টমকেট যোগাযোগ করতে সমস্যা হচ্ছে। অস্পষ্ট ত্রুটির বার্তা। টমকটের অধীনে হোস্ট করা ওয়েবসাইটগুলি নামিয়ে আনা হচ্ছে


22

সেটআপ:
ফেডোরা 8
অ্যাপাচি 2.2.8
টমক্যাট 5.5.8
অ্যাপাচি এজেপি ব্যবহার করে অনুরোধগুলি ফরোয়ার্ড করছে।

সমস্যা:
একটি নির্দিষ্ট সময়ের পরে (কোনও ধ্রুবক নয়, এক বা দুই ঘন্টা বা এক বা একাধিক দিনের মধ্যে থাকতে পারে) টমক্যাটটি নেমে যাবে। হয় এটি প্রতিক্রিয়া বন্ধ করে দেয়, বা এটি জেনেরিকটিকে 'পরিষেবা অস্থায়ীভাবে অনুপলব্ধ' রাখে।

ডায়াগনোসিস:
একই সেটআপ সহ দুটি সার্ভার রয়েছে। একটিতে উচ্চতর ট্র্যাফিক ওয়েবসাইট রয়েছে (প্রতি সেকেন্ডে বেশ কয়েকটি অনুরোধ), অন্যটি কম ট্রাফিকের (প্রতি কয়েক মিনিটের মধ্যে কয়েক মিনিটের অনুরোধ) houses উভয় ওয়েবসাইটই সম্পূর্ণ আলাদা কোডবেস, তবে তারা একই ধরণের সমস্যা প্রদর্শন করে।

প্রথম সার্ভারে, যখন সমস্যা দেখা দেয় তখন সমস্ত থ্রেড ধীরে ধীরে সীমাতে না আসা পর্যন্ত এটি শুরু করা (ম্যাক্সথ্রেডস 200)। সেই সময়ে সার্ভারটি আর সাড়া দিচ্ছে না (এবং দীর্ঘ সময়ের পরে পরিষেবাটি অনুপলব্ধ পৃষ্ঠাটি নিয়ে আসে)।

দ্বিতীয় সার্ভারে, সমস্যা দেখা দিলে অনুরোধগুলি দীর্ঘ সময় নেয় এবং সেগুলি হয়ে গেলে আপনি যা দেখেন সমস্ত পরিষেবা অনুপলব্ধ পৃষ্ঠা।

ম্যাক্সথ্রেডস সমস্যার উল্লেখ ব্যতীত টমক্যাট লগগুলি এমন কোনও নির্দিষ্ট সমস্যা নির্দেশ করে না যা এর কারণ হতে পারে।

তবে অ্যাপাচি লগগুলিতে আমরা এজেপির উল্লেখ করে এলোমেলো বার্তাগুলি দেখছি। আমরা দেখতে এলোমেলো বার্তার একটি নমুনা এখানে (কোনও নির্দিষ্ট ক্রমে নয়):

[error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[error] (104)Connection reset by peer: ajp_ilink_receive() can't receive header
[error] proxy: AJP: disabled connection for (localhost)
[error] ajp_read_header: ajp_ilink_receive failed
[error] (120006)APR does not understand this error code: proxy: read response failed from 127.0.0.1:8009 (localhost)
[error] ap_proxy_connect_backend disabling worker for (localhost)

উচ্চতর ট্র্যাফিক সার্ভারে আমরা অন্য যে অদ্ভুত বিষয়টি লক্ষ্য করেছি তা হ'ল সমস্যাটি শুরুর আগে ডেট ডাটাবেস অনুসন্ধানগুলি আগের তুলনায় অনেক বেশি সময় নেয় (2000-5000 এমএস বনাম সাধারণভাবে 5-50 মিমি)। এটি কেবলমাত্র ম্যাক্সথ্রেডস বার্তাটি আসার আগে 2-4 সেকেন্ড স্থায়ী হয়। আমি ধরে নিচ্ছি যে এটি হঠাৎ করে খুব বেশি ডেটা / ট্রাফিক / থ্রেড নিয়ে কাজ করে সার্ভারের একটি ফলাফল।

পটভূমি তথ্য:
এই দুটি সার্ভার বেশ কিছুদিন ধরেই কোনও সমস্যা ছাড়াই চলছিল। সেই সময়ের মধ্যে দুটি এনআইসি ব্যবহার করে সিস্টেমগুলি প্রকৃতপক্ষে সেটআপ করা হয়েছিল। তারা অভ্যন্তরীণ এবং বাহ্যিক ট্র্যাফিক পৃথক করে। একটি নেটওয়ার্ক আপগ্রেড করার পরে, আমরা এই সার্ভারগুলি একক এনআইসি-তে স্থানান্তরিত করেছি (এটি আমাদের সুরক্ষা / সরলতার কারণে প্রস্তাবিত হয়েছিল)। পরিবর্তনের পরে, সার্ভারগুলিতে এই সমস্যাগুলি শুরু হয়েছিল।

রেজোলিউশন:
সুস্পষ্ট সমাধান হ'ল দুটি এনআইসির সেটআপে ফিরে যাওয়া। এর সাথে সমস্যাগুলি হ'ল এটি নেটওয়ার্ক সেটআপের সাথে কিছু জটিলতা সৃষ্টি করবে এবং সমস্যাটি উপেক্ষা করার মতো মনে হচ্ছে। আমরা চেষ্টা করতে এবং এটি একটি একক এনআইসি সেটআপে চালিত করতে পছন্দ করব।

বিভিন্ন ত্রুটি বার্তাগুলি গুগল করা কার্যকর কিছু সরবরাহ করে না (হয় পুরানো সমাধান বা আমাদের সমস্যার সাথে সম্পর্কিত নয়)।

আমরা বিভিন্ন টাইমআউটগুলি সামঞ্জস্য করার চেষ্টা করেছি তবে এটি মরার আগে সার্ভারটি কিছুটা দীর্ঘ চালিয়েছে।

সমস্যাটি আরও কীভাবে নির্ণয় করা হবে তা আমরা নিশ্চিত নই। সমস্যাটি কী হতে পারে তা আমরা এখনও স্ট্রগুলিতে উপলব্ধি করছি:

1) এজেপি এবং টমক্যাটের সাথে সেটআপটি ভুল, বা পুরানো (অর্থাত্‍ পরিচিত বাগগুলি?)
2) নেটওয়ার্ক সেটআপ (একটি এনআইসির বিপরীতে দুটি এনআইসি) বিভ্রান্তি বা থ্রুপুট সমস্যা সৃষ্টি করছে।
3) ওয়েবসাইটগুলি নিজেরাই (কোনও সাধারণ কোড নেই, কোনও প্ল্যাটফর্ম ব্যবহার হচ্ছে না, সার্ভলেট এবং জেএসপি সহ কেবলমাত্র বেসিক জাভা কোড)

আপডেট 1:
ডেভিড পাশলির সহায়ক পরামর্শ অনুসরণ করে আমি ইস্যু করার সময় একটি স্ট্যাক ট্রেস / থ্রেড ডাম্প করেছি। আমি যেটা খুঁজে পেয়েছি তা হল যে সমস্ত 200 থ্রেড নীচের একটিতে ছিল:

"TP-Processor200" daemon prio=1 tid=0x73a4dbf0 nid=0x70dd waiting for monitor entry [0x6d3ef000..0x6d3efeb0]
at  oracle.jdbc.pool.OracleConnectionCacheImpl.getActiveSize(OracleConnectionCacheImpl.java:988)
- waiting to lock <0x7e3455a0> (a oracle.jdbc.pool.OracleConnectionCacheImpl)
[further stack trace removed for brevity]

"TP-Processor3" daemon prio=1 tid=0x08f142a8 nid=0x652a waiting for monitor entry [0x75c7d000..0x75c7ddb0]
at oracle.jdbc.pool.OracleConnectionCacheImpl.getConnection(OracleConnectionCacheImpl.java:268)
- waiting to lock <0x7e3455a0> (a oracle.jdbc.pool.OracleConnectionCacheImpl)
[further stack trace removed for brevity]

কৌতূহলজনকভাবে, 200 টি থ্রেডের মধ্যে একটি মাত্র থ্রেড এই অবস্থায় ছিল:

"TP-Processor2" daemon prio=1 tid=0x08f135a8 nid=0x6529 runnable [0x75cfe000..0x75cfef30]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at oracle.net.ns.Packet.receive(Unknown Source)
at oracle.net.ns.DataPacket.receive(Unknown Source)
at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
[further stack trace removed for brevity]

এটি হতে পারে যে এই থ্রেডের ওরাকল ড্রাইভার অন্যান্য সমস্ত থ্রেড এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে বাধ্য করছে। কোনও কারণে এটি অবশ্যই এই পঠন অবস্থায় আটকে থাকতে হবে (সার্ভারটি নিজে থেকে পুনরুদ্ধার করে না, এটি পুনঃসূচনা প্রয়োজন)।

এটি পরামর্শ দেয় যে এটি অবশ্যই সার্ভার এবং ডাটাবেসের মধ্যে থাকা নেটওয়ার্কের সাথে বা ডাটাবেসের মধ্যেই সম্পর্কিত হতে পারে। আমরা নির্ণয়ের প্রচেষ্টা চালিয়ে যাচ্ছি, তবে কোনও পরামর্শ টি সহায়ক হবে।


প্রথমত, এটি একটি দুর্দান্ত প্রশ্ন written বিবরণে কল্পনাপ্রসূত কাজ! দ্বিতীয়ত, আপনি অ্যাপাচি এবং টমক্যাট সার্ভারগুলি সংযোগ করতে প্রক্সি_আজপি বা মোড_জেকে ব্যবহার করছেন?
ওপিডিয়ান

আমি দুটি সংযোগ করতে প্রক্সি_এজপি ব্যবহার করছি।
জর্ডি বুম

অবরোধ, joedog.org/siege-home ব্যবহার করে স্ট্রেস টেস্টগুলি করুন ।
প্যালফে

উত্তর:


9

দেখা যাচ্ছে যে ওরাকল ড্রাইভারের এই সংস্করণটি (ক্লাস 12 - বেশ পুরানো) এর মধ্যে বিভিন্ন বাগ রয়েছে যা একটি অচলাবস্থার সৃষ্টি করেছে (উপরে উল্লিখিত টিপি-প্রসেসর 2 স্টেটে দেখা গেছে)। আমরা নতুন পরিবেশের দিকে না যাওয়া পর্যন্ত এটি সক্রিয় হয় নি। সর্বশেষতম সংস্করণে আপগ্রেড (ojdbc14) প্রাথমিক সার্ভারে সমস্যাটি সমাধান হয়েছে।


এটি আমাকে আমার সঠিক সমাধানের দিকে নিয়ে যায়: আমার একটি ডিবি-সারিতে একটি লক ছিল ... এবং অ্যাপ-সার্ভারে কখনও কোনও ব্যতিক্রম
পাই নি

6

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

  • স্ট্যাক ট্রেস পান, হয় জাস্টাক ব্যবহার করে বা কিল -3 $ প্রক্রিয়া_আইডি ব্যবহার করুন। মারা যাওয়ার পরে আপনার থ্রেডগুলি কী করছে তা দেখুন। যদি তারা সকলেই ডাটাবেসে অপেক্ষা করে থাকে তবে এটি আমার তত্ত্বের পক্ষে একটি ভাল পয়েন্টার। তারা সব কিছু লক অপেক্ষা করা হতে পারে।
  • ল্যাম্বডোপ্রোব ইনস্টল করুন। আপনার টমক্যাটটি কী করছে তা সন্ধানের জন্য এটি অমূল্য।
  • আপনার টমক্যাট আপগ্রেড করুন। 5.5.8 অবিশ্বাস্যভাবে পুরানো। আমি মনে করি তারা এখন 5.5.27 এ রয়েছে।

ডেভিড, আমি আপনার থ্রেড ডাম্প / স্ট্যাক ট্রেস পরামর্শের উপর ভিত্তি করে নতুন অনুসন্ধানগুলি সহ প্রশ্নটি আপডেট করেছি (আপডেট 1 দেখুন)।
জর্ডি বুম

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

অনেকগুলি থ্রেডের একমাত্র কারণ হ'ল সাধারণত যে থ্রেডগুলি ব্যবহৃত হয় সেগুলি সকেট থেকে পড়ার চেষ্টা করা একটি থ্রেডের জন্য অপেক্ষা করা থাকে। যে কোনও সময় ব্যবহৃত ডিবি সংযোগের সংখ্যা 1 থেকে 3 এর মধ্যে চলে যায় that এর চেয়ে বেশি কখনও প্রয়োজন হয় না।
জর্ডি বুম

5

/Etc/tomcat7/server.xML- এ পাওয়া আপনার এজেপি সংযোগকারীটিতে সংযোগকালীন টাইমআউট এবং কিপলাইভটাইমআউট যুক্ত করুন।

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" 
           connectionTimeout="10000" keepAliveTimeout="10000" />

এজেপি সংযোগকারী সম্পর্কিত তথ্য https://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html

  • সংযোগটাইমআউট = অনুরোধটি ইউআরআই লাইন উপস্থাপনের জন্য এই সংযোগকারীটি কোনও সংযোগ গ্রহণের পরে, অপেক্ষা করবে মিলিসেকেন্ডের সংখ্যা। এজেপি প্রোটোকল সংযোগকারীদের ডিফল্ট মান হ'ল -1 (অর্থাত্ অসীম)।

  • keepAliveTimeout = এই সংযোগকারীটি সংযোগটি বন্ধ করার আগে আর একটি এজেপি অনুরোধের জন্য অপেক্ষা করবে এমন মিলি সেকেন্ডের সংখ্যা। ডিফল্ট মান হ'ল সংযোগটাইমআউট অ্যাট্রিবিউট জন্য নির্ধারিত মান ব্যবহার করা হয়।

যদি সংযোগটাইমআউট এবং কিপলাইভটাইমআউট মানগুলি সংজ্ঞায়িত না করা হয়, তবে এজেপি সংযোগগুলি অসীমের জন্য জীবিত রাখা হবে। অনেক থ্রেডের কারণ হিসাবে, ডিফল্ট সর্বাধিক থ্রেড 200 হয়।

আমি পিএসআই-প্রোব ইনস্টল করার পরামর্শ দিচ্ছি - ল্যাংডা প্রোব থেকে সজ্জিত অ্যাপাচি টমক্যাটের জন্য উন্নত পরিচালক এবং মনিটর। https://code.google.com/p/psi-probe/


4

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

এই আচরণের কারণে আপনার টমক্যাট কর্মী থ্রেডের চেয়ে বেশি অ্যাপাচি কর্মী থাকতে পারে না। এটি করার ফলে অতিরিক্ত http কর্মী টমকাটের সাথে সংযোগ করতে ব্যর্থ হবেন (গ্রহণযোগ্য সারিটি পূর্ণ হওয়ায়) এবং আপনার ব্যাকএন্ডটি ডাউন হিসাবে চিহ্নিত করবে!


1
এই এত বছর পরে মন্তব্যের জন্য দুঃখিত, তবে সারকলেট ধারকটির ম্যাক্সথ্রেডসের সংখ্যার জন্য প্রক্সিপাস কনফিগারেশনের মধ্যে সর্বাধিক-পতাকাটি সেট করে গ্যারান্টি দেওয়া যায় না?
হোর্স্ট গুটম্যান

2

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

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


আমি ইমপ্রেসের মধ্যে ছিলাম যে মোড_প্রক্সিতে হুক আপ করা সহজ হওয়া সত্ত্বেও কিছু স্কেলিবিলিটি সমস্যা রয়েছে। মনে হচ্ছে অ্যাপাচি ভিত্তি mod_jk (বিশেষ পরামর্শ দেওয়া হচ্ছে wiki.apache.org/tomcat/FAQ/Connectors#Q2 )
সর্পজাতীয় জন্তু

এটি চটচটে নিবিড়তা সরবরাহ করে না, সত্য। তবে এর বাইরে আমার কখনও সমস্যা হয়নি।
রবার্ট মুন্তানু

1

প্রথম জিনিসটির কথা যখন আমি শুনি যখন শুনি যে কোনও সার্ভার কিছুক্ষণ চলবে, হঠাৎ করে ধীর হয়ে যায় এবং তারপরে পরিষেবা ব্যর্থতা শুরু হয় তা হ'ল এটি র‍্যামের বাইরে চলে গেছে এবং স্বরেটেগে যায়। আপনি যে এজেপি ব্যর্থতা দেখছেন তা সময়সীমার ফলাফল হতে পারে কিনা তা সম্পর্কে আমি পরিষ্কার নই, তবে এটি সম্পূর্ণ অযৌক্তিক বলে মনে হয় না; যদিও এটি এনআইসির সাথে সংযুক্ত হওয়ার কোনও সুস্পষ্ট উপায় দেখবেন না। যে কোনও ইভেন্টে, আমি আপনাকে এই স্মৃতি ব্যবহারের সাথে কী ঘটছে তার একটি ছবি পাওয়ার পরামর্শ দিচ্ছি যখন এই ঘটনাগুলি আসবে।

আপনি যদি র‌্যামের বাইরে চলে যান তবে আপনাকে আপনার অ্যাপাচি বন্ধ করতে হবে MaxClientsএবং আপনার বাড়াতে হবে ListenBacklog

যাইহোক, আপনার প্রশ্নটি এত সুসংহত এবং সম্পূর্ণ করার জন্য ধন্যবাদ।


যখন এটি ঘটছে তখন আমি 'শীর্ষ' অবলোকন করি, মেমরির ব্যবহার মোটামুটি সুসংগত থাকে। কমপক্ষে কোনও স্পাইক নেই। উচ্চ সিপিইউ ব্যবহারের একটি সংক্ষিপ্ত মুহূর্ত রয়েছে।
জর্ডি বুম

1

প্রক্সি_এজপি এবং টমক্যাটের সাথে রেডহ্যাট পরিবেশে আমার একই রকম লগ ত্রুটি ছিল। Httpd প্যাকেজ আপডেট করে সমাধান করা:

yum update httpd

থেকে:

  • httpd 'র-devel-2.2.3-43.el5_5.3.x86_64
  • httpd 'র-2.2.3-43.el5_5.3.x86_64

করুন:

  • httpd 'র-2.2.3-45.el5_6.3.x86_64
  • httpd 'র-devel-2.2.3-45.el5_6.3.x86_64

তারপরে অ্যাপাচি পুনরায় চালু করুন, টমক্যাট পুনরায় চালু করার পরে।

এটা আমার জন্য এটি স্থির!

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