নির্দিষ্ট প্রক্রিয়াটির জন্য ফাইল বর্ণনাকারী সীমাবদ্ধতা প্রয়োগ করা হচ্ছে না


14

আমি সম্প্রতি আমাদের রিডিস প্রসেসগুলির মধ্যে একটিটি পরীক্ষা করে দেখেছি যেগুলি যেখানে ব্যবহার করে তা প্রয়োগ করে:

cat /proc/<redis-pid>/limits

এবং শিখতে অবাক হয়েছিল যে এটি হ'ল নিম্ন ডিফল্ট মান:

Limit                     Soft Limit           Hard Limit           
Max open files            4016                 4016 

আমি অবাক হয়েছিলাম, কারণ আমাদের নিম্নলিখিতটি কনফিগার করা হয়েছে:

# /etc/sysctl.conf 
fs.file-max = 100000

# /etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000

# /etc/ssh/sshd_config
UsePAM yes

# /etc/pam.d/sshd
session required pam_limits.so

কেউ কি আমাকে বলতে পারেন যে বর্ধিত উলিমিট চলমান রেডিস প্রক্রিয়াতে কেন প্রয়োগ হচ্ছে না?

Redis প্রক্রিয়াটি ব্যবহারকারী 'redis' হিসাবে চলছে, সীমা বাড়ানো থেকে সার্ভারটি পুনরায় বুট করা হয়েছে। আমরা দেবিয়ান স্কুইজে আছি।

উত্তর:


19

লিনাক্সে রিসোর্স সীমা প্রয়োজনের ধরণের ভিত্তিতে বিভিন্ন স্থানে সেট করা যেতে পারে।

  1. /etc/security/limits.conf ফাইল।
  2. /etc/sysctl.conf ফাইল।
  3. ulimit হুকুম

/etc/security/limits.confপাম_লিমিটের অংশ এবং তাই এই ফাইলটিতে সীমাবদ্ধতাগুলি লগইন সেশনের সময় পাম_লিমিট মডিউল দ্বারা পড়ে। লগইন সেশনটি sshবা এর মাধ্যমে হতে পারে terminal। এবং পাম_লিমিটগুলি এখানে উল্লিখিত হিসাবে ডেমন প্রক্রিয়াগুলিকে প্রভাবিত করবে না ।

/etc/sysctl.confসিস্টেম ওয়াইড গ্লোবাল কনফিগারেশন, আমরা এখানে ব্যবহারকারী নির্দিষ্ট কনফিগারেশন সেট করতে পারি না। এটি সর্বাধিক পরিমাণ সংস্থান নির্ধারণ করে যা সমস্ত ব্যবহারকারী / প্রক্রিয়াগুলি ব্যবহারের জন্য ব্যবহার করতে পারে।

ulimitকমান্ড শেলের সীমা নির্ধারণ করতে ব্যবহৃত হয়। এবং সুতরাং যখন ulimitশেলটির সাথে একটি সীমা নির্ধারণ করা হয়, শেলটি থেকে যে প্রক্রিয়াটি তৈরি হয় তা সেই মানটি পেয়ে যায় কারণ নিয়মের কারণে সম্পত্তিটি child processউত্তরাধিকার সূত্রে প্রাপ্ত হয় parent processes

এবং তাই আপনার ক্ষেত্রে redisযেমন initউপরের কোনও অংশ হিসাবে শুরু করা হয়েছে আপনাকে সরাসরি সহায়তা করবে না। এটি করার যথাযথ উপায় হ'ল, আপনাকে ulimitinit স্ক্রিপ্টে নতুন মান সেট করতে কমান্ডটি ব্যবহার করতে হবে। স্ক্রিপ্টের নীচে মত,

ulimit -n 100000
if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS.

ইচ্ছামত তালিকাতেulimit বৈশিষ্ট্য যুক্ত করতে ইতিমধ্যে একটি বাগ ফাইল করা আছে start-stop-daemon

redisসেখানে সীমাবদ্ধতা দেওয়ার কোনও উপায় আছে কিনা তা কনফিগারেশন পরীক্ষা করে দেখুন ।


কানন! আমি এখন এগিয়ে গিয়ে স্টার্টআপ স্ক্রিপ্টে উলামিট যুক্ত করেছি। এটি অত্যন্ত দুঃখের বিষয় যে কেবল ব্যবহারকারীর জন্য সীমা নির্ধারণের উপায় নেই যা ডিমনডাইসড প্রক্রিয়াগুলির সাথে কাজ করবে (যেমন আমাদের একাধিক স্টার্টআপ স্ক্রিপ্ট রয়েছে), তবে এটি কাজ করে works ধন্যবাদ!
আপক্রিক

দুর্দান্ত উত্তর। পিতামাতার প্রক্রিয়ার বৈশিষ্ট্যগুলির উত্তরাধিকার সূত্রে প্রাপ্ত শিশু প্রক্রিয়াটি আমাকে অবাক করে দিয়েছিল, শিশু প্রক্রিয়া চালিত ব্যবহারকারীর জন্য সীমাবদ্ধতাগুলি সমস্তই সঠিক বলে মনে হয়েছিল তবে এটি পিতামাতার প্রক্রিয়ার মালিকের সীমা ছিল যা ব্যবহৃত হচ্ছে।
সিঙ্ক করুন

2

Sysctl fs.file-max পরামিতি বিস্তৃত বিশ্বব্যাপী সিস্টেমের সীমা, আমি মনে করি না যে একই মানটি হ্রাস করতে একটি ভাল ধারণা সেটিং।

আপনি যদি ইউলিমিট 100000 এবং সিসট্যাকলকনফ 100000 এ সেট করেন তবে একজন ব্যবহারকারী সিস্টেমটিকে অবরুদ্ধ করতে পারবেন

যে কোনও উপায়ে, আপনার সমস্যার কথা বলার সময় আপনি নিশ্চিত হয়ে উঠবেন আপনার সিস্টেম পাম_লিট ব্যবহার করে

man pam_limits
grep -i limit /etc/pam.d/*

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

2

আপনি sshd- এর জন্য পাম_লিমিট সক্ষম করেছেন, তবে এই আদেশটি কি কোনও এসএসএইচ অধিবেশন থেকে কার্যকর করা হচ্ছে? আপনার একই লাইনটি /etc/pam.d/loginএবং / অথবা /etc/pam.d/suএবং / অথবা এ যুক্ত করার প্রয়োজন হতে পারে /etc/pam.d/sudo


ধন্যবাদ। আমার সন্দেহ হয়েছিল যে একেবারেই ঠিক ছিল না। প্রক্রিয়া একটি init.d লিপিতে এই লাইন শুরু করা হচ্ছে: if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS। এই ক্ষেত্রে কোন প্যাম উপযুক্ত হবে?
ক্রিস

আপনার স্ক্রিপ্টে আপনি ulimit -n 100000
c4f4t0r

su [user] -cঅন্য ইউজার হিসাবে স্ক্রিপ্ট শুরু করার জন্য কি init.d স্ক্রিপ্টটি একটি আদেশ ব্যবহার করে, বা আপনার প্রোগ্রামটি মূল হিসাবে চালিত হবে? যদি এটি ব্যবহার করে থাকে suতবে আপনি এটি putোকাতে চাইবেন /etc/pam.d/su। আপনি যদি rootএটির মতো চালাচ্ছেন তবে ulimitআপনার init স্ক্রিপ্টে কমান্ড যুক্ত করার জন্য c4f4t0r এর পরামর্শ দিয়ে আপনি আরও ভাল off rootএটি চায় এমন কোনও সীমা নির্ধারণের অনুমতি দেওয়া হয়, সুতরাং সেই ক্ষেত্রে আপনাকে পাম সম্পর্কে সত্যই চিন্তা করার দরকার নেই।
সর্বমহলে

1
ধন্যবাদ। এটি ব্যবহার করে --chuid redis:redisউপর start-stop-daemon। আমি এখনই স্টার্টআপ স্ক্রিপ্টে উলামিট যুক্ত করেছি।
আপক্রিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.