আমি ৪০০,০০০ এর উপরে পিড দেখতে পাচ্ছি কেন? এটি কি কিছু ভুল বলে ইঙ্গিত দেয়?


14

আজ আমি কেবল লক্ষ্য করেছি যে আমার প্রসেস আইডিগুলি খুব বেশি, 400,000 (অর্থাত্ 449624) এ। আমি যখন দৌড়ে যাই ps -ef | more, আমি যখন এটি লক্ষ্য করেছি। এটি কি স্বাভাবিক বা এটি কোনও সমস্যার ইঙ্গিত দেয়? অন্যথায় স্ক্রিপ্টগুলি ঠিকঠাক চলছে।

আমি রেডহ্যাট 7.3 x64 বিট ব্যবহার করছি।

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

আমি যে হবে না kernel_pid_maxআমার মধ্যে sysctl.conf। আমি বিড়াল দৌড়ে এসে /proc/sys/kernel/pid_maxদেখি 458752


আপনি না kernel_pid_maxআপনার sysctl.confকারণ এটি হওয়া উচিত kernel.pid_max
জেআরফারগসন

বড় প্রক্রিয়া আইডিগুলির অর্থ কেবল মেশিনটি বুট হওয়ার পরে আপনি প্রচুর প্রক্রিয়া শুরু করেছেন। প্রতিবার কোনও প্রক্রিয়া শুরু হওয়ার পরে, সর্বাধিক ব্যবহৃত একের চেয়ে বড় প্রারম্ভিক আইডি বড় কার্নেল নির্ধারিত করে আপনি সর্বাধিক পৌঁছানোর পরে ঘূর্ণায়মান।
চিপনার

উত্তর:


19

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

include/linux/threads.h:

/ *
 * এটি কোনও প্রক্রিয়াতে বরাদ্দ করা ডিফল্ট সর্বাধিক পিড নিয়ন্ত্রণ করে
 * /
# নির্ধারিত পিআইডি_ম্যাক্স_ডিএফএলটি (কনফিগ_বিএএসএসএল? 0x1000: 0x8000)

0x8000 = 32768 হল 32 টিরও কম সিপিইউ থ্রেড সহ সিস্টেমগুলিতে ব্যবহৃত স্বাভাবিক মান।

এবং পরে:

# নির্ধারিত PIDS_PER_CPU_DEFAULT 1024

এই মানগুলি তখন ব্যবহৃত হয় kernel/pid.c:

int pid_max = PID_MAX_DEFAULT;

এবং পরে :

    / * সিপাসের সংখ্যার ভিত্তিতে বাম্প ডিফল্ট এবং সর্বনিম্ন পিড_ম্যাক্স * /
    পিড_ম্যাক্স = মিনিট (পিড_ম্যাক্স_ম্যাক্স, ম্যাক্স_টি (ইনট, পিড_ম্যাক্স,
                PIDS_PER_CPU_DEFAULT * num_possible_cpus ()));
    পিড_ম্যাক্স_মিনি = সর্বোচ্চ_আর (ইনড, পিড_ম্যাক্স_মিনি,
                PIDS_PER_CPU_MIN * num_possible_cpus ());
    pr_info ("পিড_ম্যাক্স: ডিফল্ট:% ইউ ন্যূনতম:% u \ n", পিড_ম্যাক্স, পিড_ম্যাক্স_মিন);

সুতরাং ওপি থেকে এর অর্থ মোট মোট 458752/1024 = 448 একসাথে থ্রেড উপলব্ধ: বেশ অনেকগুলি। অন্যান্য সিস্টেমে সম্ভবত অনেকগুলি সিপিইউ / কোর / থ্রেড ইত্যাদি নেই, তাই নিম্ন ডিফল্ট রয়েছে pid_max


1
উদাহরণস্বরূপ: সুপারসারভার 7089P-TR4T এর 224 কোর তাই 448 থ্রেড রয়েছে।
এবি

16

থেকে documentaton :proc

32-বিট প্ল্যাটফর্মে, 32768 হল পিড_ম্যাক্সের সর্বাধিক মান। -৪-বিট সিস্টেমে, পিড_ম্যাক্সকে 2 ^ 22 (পিআইডি_ম্যাক্স_লিমিটেড, প্রায় 4 মিলিয়ন) পর্যন্ত কোনও মান সেট করা যেতে পারে।

আপনি দেখতে পারেন cat /proc/sys/kernel/pid_max। আপনি এটি দিয়ে জিজ্ঞাসা করতে পারেন sysctl

sudo sysctl -a | grep kernel.pid_max

বা:

sysctl -n kernel.pid_max

/etc/sysctl.confস্থায়ীভাবে মান পরিবর্তন করতে সংশোধন করুন এবং এর সাথে পুনরায় লোড করুন sysctl -p


7

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

গনুহ ডকুমেন্টেশন বলেছেন:

তথ্য প্রকার: pid_t

pid_tডাটা টাইপ একটি স্বাক্ষরিত পূর্ণসংখ্যা টাইপ যা প্রসেস ID প্রতিনিধিত্বমূলক করতে সক্ষম হয়। জিএনইউ সি লাইব্রেরিতে এটি একটি int

অনুশীলনে, কার্নেল সাধারণত একটি উচ্চতর সীমা প্রয়োগ করে যা এটির চেয়ে কম। একটি লিনাক্স সিস্টেমে এটি নিয়ন্ত্রিত হয় /proc/sys/kernel/pid_max, এটি ডিফল্ট 32768 হয় your

বিভিন্ন অপারেটিং সিস্টেমে সীমাটি ভিন্ন হতে পারে; উদাহরণস্বরূপ, এটি প্রদর্শিত হচ্ছে যে ম্যাকওএসে, PID_MAX99999 হিসাবে হার্ডকোড করা আছে


3
লিনাক্সের মৌলিক এপিআই কারণে পিডগুলি 31-বিট স্থান পূরণ করতে পারে না; শীর্ষ 2 বিট (সাইন বিট ছাড়াও) দৃ purposes় ফিউটেক্স এবং পিআই ফিউটেক্স ইন্টারফেসগুলিতে বিশেষ উদ্দেশ্যে সংরক্ষণ করা হয়। এটি 512 এম পিড স্পেসের জন্য কেবল 29 বিট ছেড়ে যায়।
আর .. গীটহাব বন্ধ করুন ICE

1
@ আর: অবশ্যই, এটি লিনাক্সের পক্ষে সত্য। তবে যখন আমি এই উত্তরটি লিখেছি, প্রশ্নটি লিনাক্স নির্দিষ্ট করে নি, এবং তাই আমি কোনও ইউনিক্সের জন্য একটি উত্তর দিয়েছি। আমি যতদূর জানি, পসিক্স স্ট্যান্ডার্ডে এমন কোনও কিছুই নেই যার জন্য পিডগুলির জন্য একটি নির্দিষ্ট আকারের প্রয়োজন হয়; এটি এখন অপ্রয়োজনীয় বলে মনে হচ্ছে তবে আমি এমন ভবিষ্যতের সিস্টেমটি কল্পনা করতে পারি যেখানে pid_tআকারে 64-বিট ছিল।
ড্যানিয়েল প্রাইডেন

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