আমার আপাচি / পিএইচপি ভিত্তিক ওয়েব অ্যাপে আমি কীভাবে আপাত মেমরি ফাঁসের কারণ নির্ধারণ করতে পারি?


18

সপ্তাহে প্রায় একবার, তবে কখনও কখনও কয়েক দিন ধরে বেশ কয়েকবার জরিমানা চালানোর পরেও, আমার ইসি 2 উদাহরণগুলি প্রতিক্রিয়াহীন হয়ে যায়। মুনিনের স্মৃতি গ্রাফগুলি একটি দুর্দান্ত সোজা গল্প বলে: "অ্যাপ্লিকেশনগুলিতে" বরাদ্দ হওয়া মেমরিটি বৃদ্ধি পেতে শুরু করে এবং অদলবদল পুরোপুরি ব্যবহার না হওয়া অবধি বন্ধ হয়ে যায় না এবং উদাহরণটি কার্যকরভাবে তার হাঁটুতে নামানো হয়। আর একটি কাস্টম গ্রাফ দেখায় যে ক্রমবর্ধমান প্রক্রিয়াটি অ্যাপাচি 2।

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

মুনিন মেমোরি গ্রাফ

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


আপডেট: আমি স্ট্রেস জড়িত থাকার পরে ফাঁসটি ট্র্যাক করতে সক্ষম হয়েছি, যেমন ম্যাট নীচে প্রস্তাব করেছে।

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

ভাগ্যক্রমে, সমস্ত ত্রুটিযুক্ত_ব্লগ () কলগুলি কার্যকরভাবে পরিণত হয়েছিল। আমি যখন স্ট্রেস ( strace -p <pid> -tt -o trace.log -s 256) সরিয়ে ফেলি, তখন আমি দেখেছি যে প্রতিটি অনুরোধের জন্য, প্রক্রিয়াটি প্রায় 400k মেমরি বরাদ্দ করছিল ('ব্রেক' সিস্টেম কলটি সন্ধান করুন এবং শেষ কলটির প্রথম কলটির প্যারামিটারটি বিয়োগ করুন - কয়েকজন সাধারণত একটিতে আসে আরেকটার পর). আমি তখন সর্বাধিক সাম্প্রতিক 'রাইটিং' সিস্টেম কল সন্ধান করেছি যাতে আমার ত্রুটি_লগ () বার্তাটি রয়েছে, যা আমাকে জানিয়েছিল যে স্ক্রিপ্টের কোন বিন্দুতে স্মৃতি বরাদ্দ করা হচ্ছে। আরও সঠিকভাবে অবস্থান চিহ্নিত করার জন্য আরও কয়েকটি কৌশলগতভাবে ত্রুটিযুক্ত_ব্লগ () কল সহ, আমি অবশেষে অপরাধীকে খুঁজে পেয়েছি।

যখন আমরা আমাদের পিএইচপি স্ক্রিপ্ট থেকে curl_exec () ডাকি তখন মেমরিটি ফাঁস হয়। কোনও এসএসএল সংযোগ পরিচালনার সাথে সম্পর্কিত কিছু কার্ল কোড কিছু ভুল করছে - আমি এইচটিটিপিতে স্যুইচ করলে লিকটি চলে যায়। কার্লের চেঞ্জলগ কয়েকটি এসএসএল মেমরি ফাঁসের উল্লেখ করে যা 7.১৯.৫ এ স্থির হয়েছিল (আমরা 7.১৮.২ তে ছিলাম) তাই আমি এটি পরবর্তী চেষ্টা করব।

এরই মধ্যে, আমি খুব কম ম্যাক্সরেইকোয়েস্টস পারচিল্ড নিয়ে ছুটে যাচ্ছি যা অ্যাপাচিকে যুক্তিসঙ্গত সীমানায় রাখে। ধন্যবাদ সবাইকে!


একই সময়ের মধ্যে অ্যাপাচি শিশু প্রক্রিয়াগুলির সংখ্যা কীভাবে পৃথক হয়?
সাইমনজে

@ সিমোনজে সাইমন, দুর্দান্ত প্রশ্ন, সংখ্যাটি বেশ একইরকম থাকে, বেশ কয়েকটি প্রক্রিয়াটি মাইনাস। এটি সার্ভারগুলিতে যখন সমস্যা হয় সেইসাথে যখন তারা বিশ্রামে থাকে তখন প্রায় 60 টি ঘোরাফেরা করে। যদিও আমি 100% নিশ্চিত হওয়ার জন্য একটি মুনিন গ্রাফ সেট করব।
ondrej

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

উত্তর:


5

সমস্যাটি হ'ল সমস্যাটি হ'ল পাছায় ব্যথা হতে পারে T আমার যদি এমন সমস্যা হয় তবে আমি প্রথমে যা করতাম তা হ্রাস MaxRequestsPerChildকরে কম সংখ্যায় (100-200 ডলার ) কমিয়ে দেয় এবং দেখুন যে এটি কোনও পার্থক্য করে কিনা। যদি এটি হয় তবে আপনার সম্ভবত এমন কোড রয়েছে যা কোথাও একটি লুপে মেমরি ফাঁস করছে এবং আপনি একটি কোড অডিট চালাতে চাইবেন।

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


ধন্যবাদ ম্যাট 'পিএস অক্স | গ্রেপ অ্যাপাচি 2 'আমাকে জানিয়েছে যে 60 বা ততোধিক প্রক্রিয়াগুলির মধ্যে সেক্ষেত্রে প্রায় এক ডজন তার চেয়ে বেশি মেমরি ব্যবহার করছে (> আরএসএসে 100MB)। আমি / proc / <pid> / smaps এর আউটপুট দেখেছি এবং দেখেছি যে প্রত্যেকের ঠিক এক বেনাম ম্যাপিং রয়েছে যা 95% + স্থান নিয়েছে। আমি এখন মেমরির এই বিশাল অংশটি কখন এবং কখন বরাদ্দ করার চেষ্টা করছি। আমি স্ট্রেসের দিকে নজর দেব - টিপটির জন্য ধন্যবাদ।
ondrej

2

শুক্রবার ঠিক ১১ টা? এটি কি ব্যাকআপ সময়ের সাথে মিলে যায়? আপনার সিস্টেমে কি সেই সময়ে প্রক্রিয়া এবং ব্যাকআপগুলি সরবরাহ করার জন্য I / O উপলব্ধ আছে? আপনি কি ট্রেন্ডিং সফ্টওয়্যারটিতেও # প্রোস বা এমনকি অ্যাপাচি স্কোরবোর্ড প্রবণতা রাখেন, ডিস্ক আই / ও সম্পর্কে কীভাবে?

প্রথম জিনিস আমি করতে হবে নিরূপণ করা কত Mem প্রতিটি proc লাগে হবে তারপর Apache যাতে $ procmem * $ procs অতিক্রম করতে পারে না প্রাপ্তিসাধ্য RAM- র মধ্যে MaxRequests জন্য একটি যুক্তিসঙ্গত সীমা সেট করুন। আমি সন্দেহ করি যে আপনার উদাহরণটি পুনরায় বুট করা দরকার কারণ OOM সম্ভবত এমন একটি ডাইনি শিকার শুরু করে যা সম্ভবত (প্রায়শই) খুব ফলপ্রসূ নয়। আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার বাক্সটি ভারী সময়গুলি তার সীমানার মধ্যে রেখে পরিচালনা করতে পারে এবং অদলবলে না যায় এবং অবশ্যই OOM না। আপনার ক্রোনজবস চালু থাকলে এটি আরও শক্ত, এবং যদি বলা হয় ক্রোনজবস একাট্টাভাবে চালাবেন এটি নিশ্চিত না করেই চালাচ্ছেন (অর্থাত্ প্রতি 5 মিনিটের স্ক্রিপ্টটি শেষ 5 মিনিটটি এখনও চলছে কিনা তা যাচাই করতে ব্যর্থ হয়)।

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

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


0

প্রথম প্রশ্নটি জিজ্ঞাসা করুন অ্যাপ্লিকেশনটি আপাচে চলছে কি?

এটি কি আপনি লিখেছেন বা তৃতীয় পক্ষের অ্যাপ?

এটি অন্য কোন উপাদান / প্যাকেজগুলি উল্লেখ করে?

আপনি কি আপনার প্যাকেজগুলিতে আপ টু ডেট রয়েছেন?

httpd.confপারফরম্যান্স সম্পর্কিত আপনার ফাইলগুলিতে নির্দিষ্ট কিছু ?


0

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


রাফেল, ধন্যবাদ হ্যাঁ, পিএইচপি অ্যাপটি আমার এবং এটি কোনও এসকিউএল ডাটাবেসগুলিতে আঘাত করে না। আমি পিএইচপি কুইক প্রোফাইলারকে একটি শট দেব এবং ফিরে রিপোর্ট করব।
ondrej
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.