ওয়েবসারভার হিমায়িত ছাড়াই খুব বড় ফাইল মোছা হচ্ছে


11

আমার ওয়েব সার্ভারে ( অ্যাপাচি চলছে, লিনাক্স সেন্টোস), খুব বড় লগ ফাইল আছে ( 50 জিবিটি )। এই ওয়েব সার্ভারটির কিছু ওয়েব প্রোডাকশন রয়েছে।

আমি যখন লগ ফাইলটি মুছতে চেষ্টা করেছি তখন ওয়েব সার্ভারের 10 সেকেন্ডের কোনও প্রতিক্রিয়া নেই। (সময়ের বাইরে পরিষেবা।)

rm -f monthly.log

অ্যাপাচি হিমশীতল ছাড়া এই বড় ফাইলটি মুছার কোনও উপায় আছে কি?

উত্তর:


23

এটির মতো logrotateকনফিগার ব্যবহার করে প্রথমে এটি ঘোরান :

/path/to/the/log {
    missingok
    notifempty
    sharedscripts
    daily   
    rotate 7
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
    compress
}

তারপরে ঘোরানো ফাইলটি মুছতে মধ্যরাতে ক্রোন জব তৈরি করুন:

30 2 * * * nice -n 19 ionice -c2 -n7 rm -f /path/to/the/log/file.1

এর অর্থ / কী বোঝাতে পারেন?
mowwwalker

1
আপনি মুছে ফেলছেন 'নিসিং' এবং 'আয়নিং'। যেকোন সিপিইউ অতিরিক্ত ব্যবহার রোধ করার জন্য দুর্দান্ত ব্যবহার করা হয়েছিল, তবে এখানে সর্বাধিক গুরুত্বপূর্ণটি হচ্ছে আয়নিস, যেখানে আপনি আসলে শিডিয়ুলারকে নিম্ন অগ্রাধিকার সহ ফাইলটি মুছতে বলছেন। -সি শ্রেণীর জন্য যেখানে 1 টি আসল সময়, 2 সাধারণ এবং 3 টি নিষ্ক্রিয় হয়। ক্লাস 2 এর মধ্যে আপনার 0 থেকে 7 (আইআরআরসি) রয়েছে যেখানে 7 সর্বনিম্ন হয়। যদি এখনও সমস্যা তৈরি করে তবে এটি 'আয়নিস-সি 3' দিয়ে চালান এবং এটি ঠিক করা উচিত।
গোলান

5

বড় ফাইলগুলি দ্রুত মুছে ফেলার জন্য, আপনি truncateকমান্ডটি ব্যবহার করতে পারেন - এটি শূন্যের আকারে সঙ্কুচিত করতে বলুন এবং তারপরে এটি মুছুন:

 truncate -s 0  monthly.log && rm -f monthly.log

কোয়ান্টা প্রস্তাবিত হিসাবে, আপনাকে প্রথমে যদিও এটি লোগ্রোটেট করতে হবে।


এর truncateথেকে আলাদা কীভাবে >?
কোজিরো

হুম ভাল প্রশ্ন। ফলাফল একই, তবে তারা বাস্তবায়নে কীভাবে পৃথক হয় তার কোনও উত্তর আমার কাছে নেই।
ড্যানিয়েল টি।

truncateসঙ্গে ব্যবহার করার জন্য সহজ sudoচেয়ে >। এটি দিয়ে আরও সহজ find -exec
kubanczyk


3

আমি : > /path/to/monthly.logঅপারেশন দিয়ে ফাইল কেটে / শূন্য করব । তারপরে সম্ভবত অ্যাপাচি প্রক্রিয়াটি পুনরায় আরম্ভ করুন এবং ভবিষ্যতে এগুলি রোধ করতে লগ রোটেশন সেট আপ করুন ...

এটি প্রায়শই উঠে আসে, যদিও:

দেখুন: লিনাক্সে আইও / লোড ছাড়াই 100 জিবি ফাইল মোছার উপায় আছে কি?

ইউনিক্সে, সক্রিয়ভাবে লেখা হচ্ছে এমন একটি বিশাল লগ ফাইলের আকার হ্রাস করার সর্বোত্তম উপায় কী?

লিনাক্স সার্ভারের জায়গার বাইরে


কোন প্রয়োজন নেই :। আপনি কেবল করতে পারেন> /path/to/monthly.log
কোজিরো

আমি জানি এটি একটি noop, তবে এটি একটি শিক্ষামূলক দৃষ্টিকোণ থেকে আরও সার্থক করে তোলে।
ew white

… তবে তারপরে ভবিষ্যতের কিছু প্রশিক্ষকের সেই ভুল ধারণাটি সংশোধন করতে হবে । ওহ ভাল, আমি এটি কাজের নিরাপত্তা অনুমান।
কোজিরো

করবে না true > /path/to/monthly.logএকই জিনিস করে, এবং এটি তারপর কম সেকেলে এর :?
স্টিফান লাসিউইস্কি

হয়ত সত্যি ...
ewwhite

3

আপনার যদি ডেটার প্রয়োজন না হয় তবে / dev / নাল ব্যবহার করে এটি কেটে দিন:

cat /dev/null > monthly.log

ওয়েবসভারটি কাটা কাটার পরে ফাইলটিতে ডেটা লিখতে থাকবে, যা ওয়েবসারভার পুনরায় চালু করার কোনও প্রয়োজন এড়িয়ে যায় (বিপরীতে rm monthly.log, যা ফাইলটি সরিয়ে দেয়)।

তাত্ক্ষণিক সংকট সমাধানের পরে, কোয়ান্টার পরামর্শ অনুসারে লোগ্রোটেশন বিবেচনা করুন। আপনি এটি আবার ঘটতে চান না। দ্রষ্টব্য যে সেন্টোজে ডিভাইসটি আগে থেকেই আপাচি লগফাইলগুলি ঘোরানো হয়

সিসলগের মাধ্যমে ওয়েব লগগুলি প্রেরণ বিবেচনা করুন ( /usr/bin/loggerউদাহরণস্বরূপ, ব্যবহার করে )। সিসলগ ব্যবহার করে তৈরি হওয়া লগগুলিতে সাধারণত লোগ্রোটেশন ইতিমধ্যে সেট আপ থাকে।


5
আপনি কেবল >logfileবিড়ালের জন্য প্রয়োজন নেই
ব্যবহারকারী 9517

2

আপনি যদি ext3 ফাইল সিস্টেমটি ব্যবহার করেন তবে ext4 এ স্যুইচ করার বিষয়টি বিবেচনা করুন।

Ext3 বড় ফাইলগুলি মুছে ফেলাতে ধীর হতে পারে কারণ এটি প্রতিটি স্বতন্ত্র 4k ব্লকের অবস্থান সঞ্চয় করে: একটি 50GiB ফাইল (50 * 1024 ^ 3 বাইট) 13107200 ব্লক দখল করে, যার প্রতিটিটি 32-বিট ব্লক নম্বর হিসাবে ইনোড সারণীতে রেকর্ড করা আছে , ফাইলের বিষয়বস্তু ডিস্কে কোথায় রয়েছে তা ঠিক রাখার জন্য মোট 50MiB বুককিপিং ডেটার জন্য। এই বৃহত ব্লক তালিকাটি অনেকগুলি অপ্রত্যক্ষ ব্লক জুড়ে ছড়িয়ে ছিটিয়ে থাকতে পারে deleted ফাইলগুলি মুছলে মুছতে সমস্ত আপডেট করতে হবে। এই সমস্ত অপ্রত্যক্ষ ব্লক অ্যাক্সেসের জন্য অনুসন্ধান করা ডিস্কটি সম্ভবত বিলম্বের কারণ।

অন্যদিকে Ext4, 128MiB অবধি "এক্সটেন্টস" এ ফাইল বরাদ্দ করে। সেই 50GiB ফাইলটি 13107200 স্বতন্ত্র ব্লক সংখ্যাগুলির চেয়ে কেবল 400 বিস্তৃত রেকর্ড ব্যবহার করে ইনোড সারণীতে রেকর্ড করা যেতে পারে, যা ফাইলটি মোছার সময় নাটকীয়ভাবে প্রয়োজনীয় ডিস্ক I / O হ্রাস করে।

মনে রাখবেন যে আপনি যদি বিদ্যমান একটি ext3 ফাইল-সিস্টেমটি জায়গায়-জায়গায় ext4 এ রূপান্তর করেন তবে এক্সটেন্ট ব্যবহার করে নতুন ফাইল বরাদ্দ করা হবে, তবে বিদ্যমান ফাইলগুলি ব্লক তালিকাগুলি ব্যবহার করবে। chattr +eএক্সটেন্টস ব্যবহার করে আপনি বিদ্যমান ফাইলটি পুনরায় স্থাপন করতে কমান্ডটি ব্যবহার করতে পারেন ; কর্মক্ষমতা অনুযায়ী, এটি ফাইলের একটি অনুলিপি তৈরি করতে এবং তারপরে মূলটি মুছতে তুলনীয়।


1

এটি একটি ফাইল সিস্টেমের কর্মক্ষমতা ইস্যুতে ফোটে। এই এই প্রশ্নটিতে এর একটি আকর্ষণীয় উত্তর রয়েছে তবে এটি আপনি কোন ফাইল সিস্টেম ব্যবহার করছেন তার উপর নির্ভর করে। মাইথটিভির জন্য কয়েকশ মাল্টি-গিগাবিট এমপিইজি 2 ফাইল সঞ্চয় করার জন্য একটি ফাইল সিস্টেম তৈরি করার সময় আমি এক্সএফএস ব্যবহার করেছি কারণ সেই সময় এক্সএফএসের মোছার পারফরম্যান্স এক্সটেক্সের চেয়ে অনেক বেশি উন্নত ছিল। মধ্যবর্তী বছরগুলিতে জিনিসগুলি যথেষ্ট পরিবর্তিত হতে পারে।

যদিও আমি @ কোয়ান্টার উত্তরটি পছন্দ করি। ফাইলটি ছোট অংশে বিভক্ত করলে দ্রুত মুছে ফেলা হবে।


1

সমস্যাটি এসেছে, আমি মনে করি, আপনি সেই সুবিধাভোগী ব্যবহারকারীর কাছ থেকে ফাইলটি মুছে ফেলছেন যা অ্যাপাচি ওয়েবসার্ভার ব্যবহারকারীর চেয়ে ডিস্ক ক্রিয়াকলাপকে বেশি প্রাধান্য দেয়। আপনি যেভাবে লগ ফাইলটি মুছতে চান তা নির্ধারণ করা উচিত নয় (rm -f বা> কেটে কেটে) আপনার ডিস্কের অগ্রাধিকারের ক্রিয়াকলাপটি একটি মিনিমামে কমিয়ে আনতে হবে:

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