একটি নির্দিষ্ট প্রক্রিয়া ulimit (ফাইল খুলুন) পরিবর্তন করুন


27

একটি নির্দিষ্ট প্রক্রিয়াটির নরম - এবং কঠোর সীমাটি পরিবর্তন করা কি সম্ভব ?

আমার ক্ষেত্রে, আমার প্রক্রিয়াটি mongodএবং প্রচুর ওয়েব সংস্থান আমাকে কেবল চালানো করতে বলে:

ulimit -n <my new value>

আমার বর্তমান চিন্তা:

  • কমান্ড কীভাবে প্রক্রিয়াটির সীমাটি জানবে যে আমি সংশোধন করব? এটি কি পুরো সিস্টেমটি ফাইল সীমা খোলার পরিবর্তন করবে না?
  • আমি অনুমান করছি যে এই আদেশটি কেবল নরম সীমা পরিবর্তন করে changes তাহলে হার্ড সীমাটিও বাড়ানোর কোনও উপায় আছে?

আপনি কি এই মূল্যবান তথ্যটি পড়েছেন? docs.mongodb.org/manual/reference/ulimit
Tink

হ্যাঁ আমি এটি সমস্ত হৃদয় দিয়ে শিখেছি .. আমি কিছু অনুপস্থিত কিনা তা নিশ্চিত নই তবে সেই পৃষ্ঠাটি আপনাকে কীভাবে বিশদটি দেখতে হবে তা কেবল আপনাকে বলে। এটি আপনাকে কেবলমাত্র ইউলিমিট-এন <ভ্যালু> লিখতে বলে ...
পরীক্ষা

উত্তর:


29

একটি প্রক্রিয়া setrlimit(2)সিস্টেম কলের মাধ্যমে তার সীমা পরিবর্তন করতে পারে। আপনি চালানোর সময় আপনার ulimit -nএকটি নম্বর দেখতে হবে। প্রক্রিয়াটির জন্য মুক্ত ফাইল বর্ণনাকারীর সংখ্যার (যার মধ্যে ফাইল, সকেট, পাইপ ইত্যাদি রয়েছে) বর্তমান সীমা। ulimitকমান্ড মৃত্যুদন্ড কার্যকর getrlimit(2)সিস্টেম কল খুঁজে বের করতে কি বর্তমান মান।

মূল বিষয়টি এখানে: একটি প্রক্রিয়া তার মূল প্রক্রিয়া থেকে তার বর্তমান সীমা উত্তরাধিকার সূত্রে প্রাপ্ত হয়। তাই আপনি যদি দৌড়ে ulimit -n 64যদি আপনি কোন প্রক্রিয়া 64. খোলা ফাইল বর্ণনাকারী যে শেল এর সীমা সেট যে শেল শুরু যদি না যে, নতুন প্রক্রিয়া কল, একই সীমা হবে setrlimit()উপযুক্তভাবে।

mongodb'sউন্মুক্ত ফাইল বর্ণনাকারী সীমাটি পরিবর্তন করতে , আপনি ulimit -n 2048শেলটিতে (বা আপনার কর্নেল যে কোনও বৃহত সংখ্যক অনুমতি দেয়) চালাবেন । তারপরে আপনি সেই শেলটি শুরু করতে ব্যবহার করুন mongodb। শিশু প্রক্রিয়া হিসাবে, mongodbওপেন ফাইল বর্ণনাকারীর উপর (বৃহত্তর) সীমা উত্তরাধিকারী হবে।

সিস্টেমের ওপেন ফাইল সীমাটি পরিমার্জন করতে, যা সমস্ত প্রক্রিয়া ওপেন ফাইল বর্ণনাকারীর সীমা হিসাবে আরও বেশি মনে হয়, আপনাকে পরিবর্তন /etc/sysctl.confএবং চালনার মতো কিছু করতে হবে sysctl -pfs.file-maxপ্যারামিটারটির মানটি দেখুন /etc/sysctl.conf


কি দুর্দান্ত ব্যাখ্যা! আপনাকে অনেক ধন্যবাদ. আমি এখনই চেষ্টা করব!
পরীক্ষা

এই উত্তরটি আমাকে অনেক সাহায্য করেছে, তবুও এখন সমস্যাটি হ'ল কঠিন সীমাটি 2048, এবং এটি আমার ক্ষেত্রে যথেষ্ট নয়। 1) আমার কর্নেল যে সীমাটি অনুমতি দেয় তা আমি কীভাবে খুঁজে পাব? 2) এখন হার্ড লিমিট পরিবর্তন করা কি সম্ভব? আবার ধন্যবাদ!
পরীক্ষা

@ সর্বশেষ - আমি কখনও কঠোর সীমা বাড়িয়ে দেখিনি। এটি খুঁজে পেয়েছে : blog.samat.org/2011/04/05/… এবং এই উইকি.ব্রেককে. com / wiki / Increase-File-Descriptor-Limit-on- Linux তারা একই কথা বলে।
ব্রুস এডিগার

18

চলমান প্রক্রিয়াটির সীমা পরিবর্তন করতে আপনি ইউটিলিটি কমান্ডটি ব্যবহার করতে পারেন prlimit

prlimit --pid 12345 --nofile=1024:1024

যা অভ্যন্তরীণভাবে কাজ করে তা কল করা setrlimit(2)। প্রিমিটের ম্যান পৃষ্ঠায় কিছু কার্যকর অনুরোধের উদাহরণ থাকতে হবে।

সূত্র: https://sig-io.nl/posts/run-time-editing-of-limits-in-linux/


ধন্যবাদ, এটি আমার দিনটি বাঁচিয়েছে। আমার একটি দীর্ঘকালীন পাইথন প্রক্রিয়া ছিল যা too many files openত্রুটি তৈরি করে । আপনার উত্তরটি প্রক্রিয়াটি না থামিয়েই আমার সমস্যা সমাধান করেছে।
ভিশনস্কেপ

1

কমপক্ষে লিনাক্সে, বেশিরভাগ ডিস্ট্রোস প্রমাণীকরণের জন্য পাম ব্যবহার করে বলে মনে হয়। প্যামের সাথে আসা একটি মডিউল হ'ল সীমা মডিউল। পাম_লিমিটের জন্য README থেকে উদ্ধৃতি:

The pam_limits PAM module sets limits on the system resources that can be obtained in a user-session. Users of uid=0 are affected by this limits, too.

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

আপনার ক্ষেত্রে, যদি প্রক্রিয়াটি আপনি নিয়মিত ব্যবহারকারীর হিসাবে রানের সীমাটি বাড়াতে চান তবে আপনি সেই ব্যবহারকারী বা গোষ্ঠীর সীমা বাড়িয়ে দিতে পারেন। উদাহরণস্বরূপ, কিছু সার্ভারে আমার কাছে কিছু মাইএসকিএল ক্রোন জব রয়েছে যার জন্য অতিরিক্ত ফাইল হ্যান্ডলগুলি খোলার প্রয়োজন, তাই আমি এটি সেট করেছি:

$ cat /etc/security/limits.d/mysql.conf
@mysql           soft    nofile          100000
@mysql           hard    nofile          200000

পুনরায় আরম্ভ করার দরকার নেই; আপনি যখন সেই ব্যবহারকারীর কাছে মামলা করেন, আপনি তত্ক্ষণাত্ দেখতে পান যে নতুন সীমা কার্যকর হয়।

আপনি যদি একটি সাধারণ রেডহ্যাট ডেরিভেড সিস্টেমে থাকেন তবে আপনি যা করতে পারেন তা হ'ল ইউলিমিট কলটি আপনি / etc / sysconfig / ER সার্ভিস স্ক্রিপ্টে রাখতে চান। উদাহরণস্বরূপ, অ্যাপাচি-র init স্ক্রিপ্টটির নাম /etc/init.d/httpd রাখা হয়েছে এবং এটি / etc / sysconfig / httpd কনফিগারেশন ফাইলটি খুঁজে পাওয়া যায় যদি তা পাওয়া যায়। আমি নিজেই স্ক্রিপ্টগুলি আরআইপি স্ক্রিপ্ট সম্পাদনা করার পরিবর্তে এটি পরিচালনা করে কাজটি সহজ করে দেখতে পেয়েছি কারণ আরপিএম আপগ্রেড করা হলে init স্ক্রিপ্টগুলি আপডেট হয়ে যায়, তবে ডিফল্ট থেকে পরিবর্তিত না হলে সিসকনফিগ ফাইলগুলি কেবল আপডেট হয়।


সেরা এবং সবচেয়ে ব্যবহারিক সমাধান।
নেলারাও

0

কমান্ড কীভাবে প্রক্রিয়াটির সীমাটি জানবে যে আমি সংশোধন করব? এটি কি পুরো সিস্টেমটি ফাইলের সীমা খোলার পরিবর্তন করবে না?

কমান্ডটি বর্তমান প্রক্রিয়া (আপনার শেল) এবং যে কোনও শিশু প্রক্রিয়া (পরে আপনি শেল থেকে চালান এমন কিছু) সীমা পরিবর্তন করবে।

প্রক্রিয়াগুলি একটি গাছে সংগঠিত হয়। প্রতিটি প্রক্রিয়াটির একটি পিতা-মাতা থাকে (যা এটি আবেদন করেছিল)। প্রক্রিয়া নম্বর 1, init, এটির নিজস্ব পিতামাতার একটি বিশেষ প্রক্রিয়া। হটোপ বা শীর্ষের মতো সরঞ্জামগুলি আপনাকে পিতামাতাদের এবং শিশুদের গাছ হিসাবে প্রদর্শিত প্রক্রিয়াগুলি দেখাতে পারে।

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