সেটআপ:
ফেডোরা 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]
এটি হতে পারে যে এই থ্রেডের ওরাকল ড্রাইভার অন্যান্য সমস্ত থ্রেড এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে বাধ্য করছে। কোনও কারণে এটি অবশ্যই এই পঠন অবস্থায় আটকে থাকতে হবে (সার্ভারটি নিজে থেকে পুনরুদ্ধার করে না, এটি পুনঃসূচনা প্রয়োজন)।
এটি পরামর্শ দেয় যে এটি অবশ্যই সার্ভার এবং ডাটাবেসের মধ্যে থাকা নেটওয়ার্কের সাথে বা ডাটাবেসের মধ্যেই সম্পর্কিত হতে পারে। আমরা নির্ণয়ের প্রচেষ্টা চালিয়ে যাচ্ছি, তবে কোনও পরামর্শ টি সহায়ক হবে।