@oligofren
কীভাবে প্রয়োগ করা হয়েছিল তা নির্ধারণ করার "ulimits -Sn"
জন্য আমি কিছু পরীক্ষাও চালিয়েছি "open files"
।
পোস্টার মতো নির্বাচিত উল্লেখ লিংক , জন্য ulimit "open files"
প্রকৃতপক্ষে প্রক্রিয়া প্রতি প্রয়োগ করা হয়। প্রক্রিয়াটির বর্তমান সীমাগুলি কী তা দেখতে:
cat /proc/__process_id__/limits
একটি প্রক্রিয়া কতগুলি ফাইল খুলেছে তা নির্ধারণ করতে, আপনাকে নিম্নলিখিত কমান্ডটি ব্যবহার করতে হবে:
lsof -P -M -l -n -d '^cwd,^err,^ltx,^mem,^mmap,^pd,^rtd,^txt' -p __process_id__ -a | awk '{if (NR>1) print}' | wc -l
উপরের ব্যাখ্যা এবং আমার পরীক্ষার পদ্ধতি / ফলাফল
"-P -M -l -n"
আর্গুমেন্ট lsof করতে কেবল আছে lsof হিসাবে দ্রুত চালনা সম্ভব। এগুলি বাইরে নির্দ্বিধায় নিন।
-P - inhibits the conversion of port numbers to port names for network files
-M - disable reporting of portmapper registrations for local TCP, UDP and UDPLITE ports
-l - inhibits the conversion of user ID numbers to login names
-n - inhibits the conversion of network numbers to host names for network files
"-d '^cwd,^err,^ltx,^mem,^mmap,^pd,^rtd,^txt'"
যুক্তি নির্দেশ করে lsof
ধরনের ফাইল বর্ণনাকারী বাদ দেওয়ার: cwd / মাত্রই ভুল করে / ltx / Mem / mmap / PD / অব / টেক্সট।
এলএসফ ম্যান পৃষ্ঠা থেকে:
FD is the File Descriptor number of the file or:
cwd current working directory;
Lnn library references (AIX);
err FD information error (see NAME column);
jld jail directory (FreeBSD);
ltx shared library text (code and data);
Mxx hex memory-mapped type number xx.
m86 DOS Merge mapped file;
mem memory-mapped file;
mmap memory-mapped device;
pd parent directory;
rtd root directory;
tr kernel trace file (OpenBSD);
txt program text (code and data);
v86 VP/ix mapped file;
আমি "Lnn,jld,m86,tr,v86"
লিনাক্সের জন্য প্রযোজ্য নয় বলে ধরে নিয়েছি এবং সেহেতু সেগুলি বাদ দেওয়ার তালিকায় যুক্ত করার পক্ষে মাথা ঘামায় না। আমি সম্পর্কে নিশ্চিত না "Mxx"
।
আপনার আবেদন তোলে মেমরির ম্যাপ ফাইলের ব্যবহার করেন তাহলে / ডিভাইস তারপর আপনি সরাতে চান পারে "^mem"
এবং "^mmap"
বাদ দেওয়ার তালিকাটি থেকে।
সম্পাদনা করুন --- স্নিপ শুরু করুন ---
সম্পাদনা: আমি নীচের লিঙ্কটি পেয়েছি যা ইঙ্গিত করে যে:
প্রযুক্তিগতভাবে মেমরিযুক্ত মেমোরি .এস-ফাইলগুলি ফাইল হ্যান্ডেলের মতো নয় যেমন অ্যাপ্লিকেশনটির নিয়ন্ত্রণ থাকে। ওপেন ফাইল বর্ণনাকারীদের জন্য পরিমাপ করার বিন্দুটি হল / প্রোচ // এফডি
সুতরাং আপনার প্রক্রিয়া যদি মেমরি ম্যাপযুক্ত ফাইলগুলি ব্যবহার করে তবে আপনার * .so ফাইলগুলি ফিল্টার আউট করতে হবে।
এছাড়াও, সানের জেভিএম জার ফাইলগুলির মেমরির মানচিত্র তৈরি করবে
একটি স্মৃতি-ম্যাপযুক্ত জেআরফিল, এই ক্ষেত্রে ফাইলটি "জেডিকে ক্লাসগুলি" ধারণ করে। আপনি যখন একটি জেআর মেমরি করে রাখেন, আপনি খুব দক্ষতার সাথে এর মধ্যে ফাইলগুলি অ্যাক্সেস করতে পারেন (প্রতিবার এটি শুরু থেকে পড়ার বিপরীতে)। সান জেভিএম ক্লাসপথের সমস্ত জারগুলিকে মেমরি-মানচিত্র তৈরি করবে; যদি আপনার অ্যাপ্লিকেশন কোডটির কোনও জেআর অ্যাক্সেসের প্রয়োজন হয় তবে আপনি এটিকে মেমরি-ম্যাপও করতে পারেন।
সুতরাং টমক্যাট / গ্লাসফিশের মতো জিনিসগুলি মেমরি ম্যাপযুক্ত জার ফাইলগুলিও প্রদর্শন করবে। আমি এই পরীক্ষা করে দেখিনি যে এগুলি "ulimit -Sn"
সীমাতে চলেছে ।
সম্পাদনা --- শেষ স্নিপ ---
মহিমান্বিতভাবে, আমি খুঁজে পেয়েছি যে প্রতি প্রক্রিয়া ফাইল সীমা (ulimit -Sn) এর সাথে গণনা করা"cwd,rtd,txt"
হয় না ।
আমি নিশ্চিত নই যে "err,ltx,pd"
এই সারণীর ধারে ফাইল হ্যান্ডলগুলি কীভাবে তৈরি করতে হয় তা আমি জানি না কারণ আমি ফাইল সীমাতে গণনা করা হয় কিনা ।
"-p __process_id__"
যুক্তি কেবল নির্দিষ্টগুলির lsof
জন্য তথ্য ফেরত দেওয়ার ক্ষেত্রে সীমাবদ্ধ করে __process_id__
। আপনি যদি সমস্ত প্রক্রিয়াটির জন্য একটি গণনা পেতে চান তবে এটি সরান।
"-a"
যুক্তি ব্যবহার করা হয় এবং পছন্দসই মান নির্বাচন করে (যেমন "-p" এবং "-d" আর্গুমেন্ট)।
"awk '{if (NR>1) print}'"
বিবৃতি যে হেডার লাফালাফি করতে ব্যবহৃত হয় lsof
তার আউটপুটে প্রিন্ট।
আমি নিম্নলিখিত পার্ল স্ক্রিপ্ট ব্যবহার করে পরীক্ষা করেছি:
File: test.pl
---snip---
#!/usr/bin/perl -w
foreach $i (1..1100) {
$FH="FH${i}";
open ($FH,'>',"/tmp/Test${i}.log") || die "$!";
print $FH "$i\n";
}
---snip---
স্ক্রিপ্টটি ফাইল বর্ণনাকারী বন্ধ না করে এবং প্রকাশ করতে না পারে তা নিশ্চিত করার জন্য আমাকে পার্ল ডিবাগারে স্ক্রিপ্টটি কার্যকর করতে হয়েছিল।
চালানো: perl -d test.pl
পার্লের ডিবাগারে আপনি প্রবেশ করে c
এবং এন্টার টিপে প্রোগ্রামটি চালাতে পারেন এবং যদি আপনার 1024 এরulimit -Sn
মান হয় তবে আপনি ফাইলটি তৈরি করার পরে প্রোগ্রামটি থামবে তা দেখতে পাবেন ।Test1017.log
/tmp
আপনি যদি এখন পার্ল প্রক্রিয়াটির পিড সনাক্ত করেন এবং উপরের lsof
কমান্ডটি ব্যবহার করেন তবে আপনি দেখতে পাবেন যে এটি 1024 এর আউটপুটও দেয় ।
1024 সীমাতে গণনা করা ফাইলগুলির তালিকা দেখতে "wc -l"
এটিকে সরিয়ে ফেলুন এবং এর সাথে প্রতিস্থাপন করুন । সরান যুক্তি হিসেবে দেখতে যে এবং বর্ণনাকারী করা হয়নি সীমা গণনা করা হবে।"less"
"-d ^....."
cwd,txt
rtd
আপনি যদি এখন চালনা করেন "ls -l /proc/__process_id__/fd/ | wc -l"
তবে দেখবেন 1025 এর মান এসেছে। এটি কারণ এটির ফলাফলকে ls
একটি "total 0"
শিরোনাম যুক্ত হয়েছে যা গণনা করা হয়েছে।
বিঃদ্রঃ:
ওএস ফাইল বর্ণনাকারীর বাইরে চলেছে কিনা তা পরীক্ষা করতে, এর মানটির তুলনা করা ভাল :
cat /proc/sys/fs/file-nr | awk '{print $1}'
সঙ্গে
cat /proc/sys/fs/file-max
https://www.kernel.org/doc/Docamentation/sysctl/fs.txt কী file-nr
এবং এর file-max
অর্থ দস্তাবেজ ।