কীভাবে সাবস্ক্রি অপসারণ (`rm -rf`) ডিস্ক আই / ও এর জন্য অন্যান্য প্রক্রিয়া অনাহারে রাখবেন?


8

একটি ব্যস্ত সাইটের জন্য আমাদের কাছে খুব বড় (মাল্টি-জিবি) এনগিনেক্স ক্যাশে ডিরেক্টরি রয়েছে, যা আমাদের মাঝে মাঝে একবারে সমস্ত মুছে ফেলা প্রয়োজন। অতীতে আমি ক্যাশে ফোল্ডারটিকে একটি নতুন পথে সরিয়ে, পুরানো পথে নতুন ক্যাশে ফোল্ডার তৈরি করে এবং তারপরে rm -rfপুরানো ক্যাশে ফোল্ডারটি যুক্ত করে সমাধান করেছি।

ইদানীং, যখন আমাকে একটি ব্যস্ত সকালে ক্যাসটি সাফ করার দরকার হয়, তখন থেকে I / O rm -rfআমার ডিস্ক অ্যাক্সেসের সার্ভার প্রক্রিয়াগুলি অনাহারে রাখে, কারণ Nginx এবং এটির সার্ভার উভয়ই পড়া-নিবিড়। আমি যখন CPU গুলি নিষ্ক্রিয় হয়ে বসে থাকি এবং rm -rfডিস্ক IO এর 98-99% নেয় তখন আমি লোড গড় চড়াই দেখতে পারি iotop

আমি ionice -c 3প্রার্থনা করার সময় চেষ্টা করেছি rm, তবে মনে হয় এটি পর্যবেক্ষণের আচরণের কোনও প্রশংসাজনক প্রভাব ফেলেনি।

rm -rfডিস্কটি আরও ভাগ করে নেওয়ার কোনও উপায় আছে কি ? আমার কি অন্যরকম প্রযুক্তি ব্যবহার করা দরকার যা এর সূত্রগুলি গ্রহণ করবে ionice?

হালনাগাদ:

প্রশ্নে থাকা ফাইল সিস্টেমটি একটি এডাব্লুএস ইসি 2 ইনস্ট্যান্স স্টোর (প্রাথমিক ডিস্কটি ইবিএস)। /etc/fstabএন্ট্রি ভালো দেখায়:

/dev/xvdb       /mnt    auto    defaults,nobootwait,comment=cloudconfig 0       2

আপনি সম্ভবত যে ফাইল সিস্টেমটি ব্যবহার করছেন এবং কীভাবে (মাউন্ট অপশনগুলি) উল্লেখ করা উচিত।
ক্রিশ্চিয়ান সিপিতু

আপডেট করা হয়েছে। এছাড়াও, যদি এটি গুরুত্বপূর্ণ হয় তবে এটি উবুন্টু 12.04 এ রয়েছে।
ডেভিড আইক

নোট করুন যে অ্যামাজন ইবিএসে আইওর অভিনয় বেশ খারাপ হতে পারে। Perfcap.blogspot.com/2011/03/… দেখুন যা স্বল্প-মেয়াদী (1 মিনিট) 1000-এর মধ্যে বিস্ফোরিত হওয়ার সাথে দীর্ঘমেয়াদী সর্বোচ্চ 100 আইওপ্সের প্রস্তাব দেয় It মনে হচ্ছে আপনার কেসটি এক মিনিটের চেয়ে কিছুটা বেশি উচ্চতর, সুতরাং সমস্যা।
মোশে কাটজ

ঠিক আছে, এজন্য আমরা ক্যাশের জন্য ইবিএস নয়, একটি উদাহরণ স্টোর ব্যবহার করছি। আমার আপডেট মন্তব্য দেখুন। দুঃখিত যদি এটি পরিষ্কার না ছিল।
ডেভিড আইক

দুঃখিত, আমি দেরী করেছি, তবে আপনি সিগ্রুপগুলি এবং ব্লকিও নিয়ামককে তদন্ত করতে পারেন: কার্নেল.আর
ডক

উত্তর:


3

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

কমান্ড বিচ্ছিন্ন সিস্টেম সময়% সিপিইউ সিএস 1 * (ভোল / ইনভোল)
rsync -a -ডিলেট খালি / একটি 10.60 1.31 95% 106/22
b / -type f -delet 28.51 14.46 52% 14849/11 সন্ধান করুন
সি / টাইপ চ | xargs -L 100 আরএম 41.69 20.60 54% 37048/15074
ডি /-টাইপ চ | xargs -L 100 -P 100 rm 34.32 27.82 89% 929897/21720
rm -rf f 31.29 14.80 47% 15134/11

* সিএস 1 হ'ল প্রসঙ্গটি স্বেচ্ছাসেবী এবং স্বেচ্ছাসেবী


যদিও এটি তাত্ত্বিকভাবে প্রশ্নের উত্তর দিতে পারে , এখানে উত্তরের প্রয়োজনীয় অংশগুলি অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্ক সরবরাহ করা ভাল।
টম ও'কনোর

আকর্ষনীয়! আমি ইহা চেস্টা করব.
ডেভিড আইক

rsyncএখনই চলছে। সম্ভবত এটি বলা খুব তাড়াতাড়ি, এবং এটি সাহায্য করা যেতে পারে যে আমি একটি ব্যস্ত সকালে এই মাঝখানে চালাচ্ছি না, তবে সার্ভারটি এখনও প্রতিক্রিয়াশীল এবং লোড গড় পরিচালনাযোগ্য।
ডেভিড আইক

সঠিক অনুরোধটি আমি ব্যবহার করছি:ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ /mnt/nginx-cache-old
ডেভিড আইক

ঠিক আছে, এতে মাত্র 4 ঘন্টা লেগেছিল। ;) আমি এই উত্তরটি (দুঃখিত @ আফারবার) গ্রহণ করতে যাচ্ছি যেহেতু আমি সহজ সরল প্রার্থনা পছন্দ করি এবং এটি সংবেদনশীল বলে মনে হয় niceএবং ioniceকমপক্ষে এটি সার্ভারটি ধ্বংস করে rm -rfনি।
ডেভিড আইক

9

ফাইলগুলি সরানো কেবল ফাইল সিস্টেমে মেটাডেটা অপারেশন করে, যা আয়নিস দ্বারা প্রভাবিত হয় না।

সবচেয়ে সহজ উপায় হ'ল যদি আপনার এখনই ডিস্কস্পেসের প্রয়োজন না rmহয়, অফ-পিক আওয়ারের সময়গুলি সম্পাদন করতে ।

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

while find dir -type f | head -n 100 | xargs rm; do sleep 2; done
while find dir -type d -depth | head -n 100 | xargs rmdir; do sleep 2; done

এছাড়াও মনে রাখবেন যে আপনি rm -fপ্রথম কমান্ডটিতে ব্যবহার করতে পারবেন না কারণ লুপটি থামবে না ( rmযখন কোনও যুক্তি নেই তখন এটি ত্রুটির প্রস্থান কোডের উপর নির্ভর করে )।

আপনি চক্র প্রতি মোছার সংখ্যা (উদাহরণস্বরূপ 100) এবং ঘুমের সময়কাল সংশোধন করে এটাকে টুইট করতে পারেন। এটি সম্ভবত কার্যকর হবে না যেহেতু ফাইল সিস্টেমটি এখনও মেটাডেটা আপডেটগুলি এমনভাবে তৈরি করতে পারে যাতে আপনি নিজের আইও লোড নিয়ে সমস্যায় পড়তে পারেন। আপনি শুধু চেষ্টা করতে হবে।


অনেকগুলি ফাইল মুছে ফেলাতে দীর্ঘ সময় লাগে, সুতরাং আসলে "অফ-পিক" সময় নেই যা এটি ঘিরে থাকবে। :(
ডেভিড আইক

whileলুপ যখন কৌতুক করতে বলে মনে হয় head -n 50। 100 এখনও ধীরে ধীরে লোড গড়কে সমালোচনামূলকভাবে উপরে বাড়িয়ে দিচ্ছিল, যা আমাকে বলছে যে খুব বেশি সংস্থান বিতরণ চলছে।
ডেভিড আইক

মানুষ, দৌড়াতে অনেক সময় লাগে!
ডেভিড আইক

অনুসন্ধানটি এখনও লুপের প্রতিটি পুনরাবৃত্তির জন্য ডিরেক্টরি এবং সমস্ত উপ-ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করছে। আপনি সম্ভবত এর মতো আরও কিছু করতে পারেন
র্যান্ডি অরিসন

1
অনুসন্ধানটি এখনও লুপের প্রতিটি পুনরাবৃত্তির জন্য ডিরেক্টরি এবং সমস্ত উপ-ডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করছে। আপনি সম্ভবত ডির-টাইপ এফ-প্রিন্ট0 | সন্ধানের মতো কিছু দিয়ে আরও ভাল করতে পারেন xargs -l50 -0 rmwait যেখানে rmwait একটি স্ক্রিপ্ট যা rm "$ @" করে; ঘুম 2. ফাঁকা স্থানের সাথে ফাইলের নামগুলি হ্যান্ডেল করতে -প্রিন্ট 0 এবং -0 এর ব্যবহারটি লক্ষ্য করুন। -l50 xargs কে একবারে কেবল 50 টি করতে বলে।
রেন্ডি অরিসন

-1

আপনি এটি "সুন্দর" কমান্ডের সাথে জুড়ি দিতে পারেন। ionice -c 3 nice -19 rm -rf /some/folder

এটি মেশিনে প্রক্রিয়াটির অগ্রাধিকার পরিবর্তন করে।


দুর্ভাগ্যক্রমে, niceমনে হয় যতটা প্রভাব আছে, ততটা ioniceপ্রশংসনীয় কিছু নয়।
ডেভিড আইক

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

আমি বিশ্বাস করি যে @ আফারবার এটিকে তার উত্তরে সম্বোধন করেছেন: "ফাইলগুলি সরানো কেবলমাত্র ফাইল সিস্টেমে মেটাডেটা অপারেশন করে, যা আয়নিস দ্বারা প্রভাবিত হয় না।" আমি বিতর্কটি দেখেছি - আমার সার্ভার প্রক্রিয়াগুলি পড়ার সময়ের জন্য অনাহারে ছিল যখন সিপিইউ লোফড করেছিল এবং rm -rf99% চালু ছিল iotop
ডেভিড আইক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.