কোন সমস্যা যদি জ্যাম্বি রাজ্য সাফ না হয়?


18

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

উত্তর:


22

বোকচন্দর প্রক্রিয়া কোনও সিস্টেমের সংস্থান ব্যবহার করে না বলে জেম্বো প্রক্রিয়াটির কার্য সম্পাদন বা স্বচ্ছলতার কোনও প্রভাব পড়বে না।

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

জম্বি প্রক্রিয়া দ্বারা সমস্যা

প্রতিটি জম্বি প্রক্রিয়া তার প্রক্রিয়া আইডি ধরে রাখে। লিনাক্স সিস্টেমগুলিতে সীমাবদ্ধ সংখ্যক প্রসেস আইডি রয়েছে - 32-বিট সিস্টেমে ডিফল্টরূপে 32767 z

দ্রষ্টব্য : -৪-বিট সিস্টেমে আপনি সর্বাধিক পিআইডি বাড়িয়ে নিতে পারেন, /unix//a/16884/170373 দেখুন

তবে চারদিকে ঝুলন্ত কয়েকটি জম্বি প্রক্রিয়া কোনও সমস্যা নয় - যদিও তারা আপনার সিস্টেমে তাদের পিতামাতার প্রক্রিয়া সহ একটি বাগ নির্দেশ করে indicate

ব্যাখ্যা:

লিনাক্সে যখন কোনও প্রক্রিয়া মারা যায়, তখন তা সমস্তই তাত্ক্ষণিক স্মৃতি থেকে সরানো হয় না - এর প্রক্রিয়া বর্ণনাকারী স্মৃতিতে থাকে।

প্রক্রিয়াটির অবস্থা হয়ে যায় EXIT_ZOMBIEএবং প্রক্রিয়াটির পিতামাতাকে অবহিত করা হয় যে তার সন্তানের প্রক্রিয়াটি SIGCHLDসংকেত দিয়ে মারা গেছে ।

মূল প্রক্রিয়াটির পরে ডেড প্রক্রিয়াটির প্রস্থান স্থিতি এবং অন্যান্য তথ্য পড়তে অপেক্ষা () সিস্টেম কলটি কার্যকর করা হবে। এটি পিতামাতার প্রক্রিয়াটিকে মৃত প্রক্রিয়া থেকে তথ্য পেতে সহায়তা করে। অপেক্ষা () বলা হওয়ার পরে, জম্বি প্রক্রিয়াটি মেমরি থেকে পুরোপুরি সরিয়ে ফেলা হয়।

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

রেজোলিউশন:

আপনি জম্বি প্রক্রিয়াগুলিকে হত্যা করতে পারবেন না কারণ আপনি সিগ্কিল সিগন্যালের সাহায্যে স্বাভাবিক প্রক্রিয়াগুলি মেরে ফেলতে পারেন - জম্বি প্রক্রিয়া ইতিমধ্যে মারা গেছে।

জম্বি মারার একটি উপায় হ'ল পিতামাতার প্রক্রিয়াতে SIGCHLD সংকেত পাঠানো। এই সংকেত পিতামাতার প্রক্রিয়াটি ওয়েট () সিস্টেম কলটি কার্যকর করতে এবং এর জম্বি বাচ্চাদের পরিষ্কার করতে বলে। কমান্ড কমান্ডের সাহায্যে সিগন্যাল প্রেরণ করুন, নীচের কমান্ডে পিডকে পিতামাতার প্রক্রিয়াটির পিআইডি সহ প্রতিস্থাপন করুন:

kill -s SIGCHLD pid

জম্বিগুলি তৈরি করার প্রক্রিয়াটি শেষ হয়ে গেলে, ডি জম্বি প্রক্রিয়াগুলির উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং তাদের নতুন পিতামাতায় পরিণত হয়। (বুট করার সময় লিনাক্সে আরম্ভ করা প্রথম প্রক্রিয়া এবং পিআইডি 1 নির্ধারিত হয়)

দ্রষ্টব্য: - লিনাক্স ৩.৪ থেকে প্রসেসগুলি PR_SET_CHILD_SUBREAPER বিকল্পের সাথে prctl () সিস্টেম কল ইস্যু করতে পারে এবং ফলস্বরূপ তারা # 1 প্রক্রিয়া নয়, তাদের অনাথ বংশধর প্রক্রিয়ার পিতামাত্রে পরিণত হবে। উল্লেখ করুন: /unix//a/177361/5132  

আইএনআইটি তার পরে তার জম্বি বাচ্চাদের পরিষ্কার করার জন্য ওয়েট () সিস্টেম কলটি কার্যকর করে, তাই উদ্যোগ জম্বিগুলির সংক্ষিপ্ত কাজ করবে। আপনি বন্ধ করার পরে পিতামাতার প্রক্রিয়াটি পুনরায় চালু করতে পারেন।


অপেক্ষা () নিজেই ব্যর্থ হওয়ার কোনও সুযোগ আছে কি?
রবি


1
পিতা-মাতার বিষয়ে অংশটিও ভুল। unix.stackexchange.com/a/177361/5132 হাস্যকরভাবে, এমন প্রোগ্রামগুলিকে সাব-পেপার তৈরি করা যা প্রত্যাশা করে না তা দীর্ঘমেয়াদী জম্বি প্রক্রিয়াগুলির একটি সহজ উপায়।
জেডিবিপি

2
এই প্রক্রিয়াটি এখন একটি জম্বি মারা যাওয়ার পরে পিতামাতারা ইতিমধ্যে একটি SIGCHLD পেয়েছেন।
আঞ্জেল

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

6

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

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

সম্পাদনা : প্রক্রিয়াটি যদি জাভা প্রোগ্রাম হয় তবে মুক্ত মেমরির কোনও সমস্যা হওয়া উচিত নয়, কারণ জাভা আবর্জনা সংগ্রহকারী সমস্ত কিছুর যত্ন নেন।


3
প্রকৃতপক্ষে, মেমরিটি ফিড করা নয় এটি সমস্ত ভাষায় বেশিরভাগ ওএস ইস্যু করে না। অভিভাবক প্রক্রিয়াটির জন্য ক্ষুদ্র পরিমাণ বাদে সিস্টেম সমস্ত স্মৃতি মুক্ত করবে।
বলছে পুনর্নির্মাণ মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.