ক্যাশে হওয়া ফাইলগুলি তালিকাভুক্ত করা কি সম্ভব?


29

এখানে আউটপুট free -m:

             total       used       free     shared    buffers     cached
Mem:          7188       6894        294          0        249       5945
-/+ buffers/cache:        698       6489
Swap:            0          0          0

আমি দেখতে পাচ্ছি প্রায় 6GB(5945MB) এর বাইরে থাকা মেমরিটি 7GBফাইলগুলি ক্যাশে করার জন্য ব্যবহৃত হয়। আমি জানি কিভাবে ক্যাশে ফ্লাশ করতে হয়। আমার প্রশ্ন: কোন ফাইল (বা ইনোডস) ক্যাশে হচ্ছে তা কি সম্ভব?


আমি উত্তরটি জানি না তবে 2 টি বিষয় আগ্রহের বিষয়: আপনি ক্যাশেগুলি কীভাবে ফ্লাশ করবেন? কেন আগ্রহ এটি, আমি এখানে কিছু
বোঝাচ্ছি

2
এটি buffersএবং cached: উভয়ই ফ্লাশ করে sysctl -w vm.drop_caches=3। আপনি ব্যবহার করার আগে এটিতে আরও পড়তে চাইতে পারেন। কখনও কখনও এটি স্রেফ প্রয়োজন। এটি উপলভ্য - এটি অন্য কারণ হওয়া উচিত :)
এস্পকোটা

এটির জন্য অনেক লোক জিজ্ঞাসা করছে । কিছু কারণ থাকতে হবে।
ssapkota

আপনি যদি আই / ও সম্পর্কিত কিছু পারফরম্যান্স পরিমাপ করতে চান এবং ও / এস ক্যাচিং দ্বারা সেগুলি "নষ্ট" করতে না চান
তবে ক্যাচগুলি ফেলে দেওয়া কার্যকর হবে

উত্তর:


25

ওয়েল, সেখানে হয় একটি সহজ উপায় কার্নেলের পৃষ্ঠা ক্যাশে কটাক্ষপাত করা যদি আপনি আছে এরকম ftools - "fincore" তোমার কি ফাইল 'পৃষ্ঠাগুলি ক্যাশে বিষয়বস্তুর উপর কিছু সারসংক্ষেপ তথ্য দেয়।

পৃষ্ঠা ক্যাশে তাদের উপস্থিতি যাচাই করতে আপনাকে ফাইলের নামের একটি তালিকা সরবরাহ করতে হবে। এটি কারণ কার্নেলের পৃষ্ঠা ক্যাশে সারণিতে সঞ্চিত তথ্যগুলিতে কেবল ফাইলের নাম নয় ডেটা ব্লক উল্লেখ থাকতে পারে। fincoreইনোড ডেটা দিয়ে প্রদত্ত ফাইলের ডেটা ব্লকগুলি সমাধান করবে এবং পৃষ্ঠা ক্যাশে সারণিতে স্বতন্ত্র এন্ট্রি অনুসন্ধান করবে search

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


কোনও ফাইল ক্যাশে উপস্থিত রয়েছে কিনা তা ফিনকোরার জানিয়ে দেয়। তবে, এমন কোনও সরঞ্জাম রয়েছে যা ক্যাশে হওয়া সমস্ত ফাইলের তালিকা তৈরি করবে (ফিনকোর ফাইলের নামটি ইনপুট হিসাবে সন্ধান করবে এবং অনুসন্ধান করবে I আমি বর্তমানে ক্যাশে হওয়া সমস্ত এন্ট্রিগুলিতে সন্ধান করতে চাই)
জো

@ জো আমি অনুমান করি যে কার্নেলের পৃষ্ঠার ক্যাশে সারণিতে সঞ্চিত তথ্যগুলিতে কেবল ফাইলের নাম নয় ডেটা ব্লক রেফারেন্স থাকবে। fincoreইনোড ডেটা দিয়ে প্রদত্ত ফাইলের ডেটা ব্লকগুলি সমাধান করবে এবং পৃষ্ঠা ক্যাশে সারণিতে স্বতন্ত্র এন্ট্রি অনুসন্ধান করবে search বিপরীত করার মতো কোনও কার্যকর অনুসন্ধানের ব্যবস্থা নেই - একটি ডেটা ব্লকের সাথে যুক্ত ফাইলের নাম পেতে ফাইল সিস্টেমে সমস্ত ইনোড এবং অপ্রত্যক্ষ ব্লকগুলি পড়তে হবে। সুতরাং, অ্যালগোরিদমিকভাবে fincoreযদি আপনার সত্যিকারের এই স্তরের তথ্যের প্রয়োজন হয় তবে আপনার ফাইল সিস্টেমের সমস্ত ফাইলের একটি তালিকা সরবরাহ করা আপনার পক্ষে ভাল ।
দ্য ওয়াবিট

@ দ্য ওয়াববিট ধন্যবাদ ফাইল ছাড়াও এমন বর্ণনাকারী হিসাবে অন্যান্য বিষয় আছে যা ক্যাশে অংশ,, শেয়ার করার মেমরির ইত্যাদি হয়
জো

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

1
অপ্রচলিত উত্তরগুলির সাথে কী করবেন সে সম্পর্কে স্ট্যাকএক্সচেঞ্জের স্ট্যান্ড কিছুটা দ্বিপাক্ষিক। স্বীকৃত উত্তরগুলি মুছে ফেলা বা উল্লেখযোগ্যভাবে পরিবর্তন করা উচিত। ভিএমটিউচের সুপারিশ করার জন্য এই উত্তরটি পরিবর্তন করা @ এমওওয়াইটির বিদ্যমান উত্তরটির সদৃশ হবে, যার সমান সংখ্যক উর্ধ্বতন রয়েছে। সুতরাং কেবলমাত্র ew white এর উত্তর আরও কৌতুক করা উচিত, ডান?
দ্য ওয়াববিট

19

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

[root@xt ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[     ] 0/5

           Files: 1
     Directories: 0
  Resident Pages: 0/5  0/20K  0%
         Elapsed: 0.000215 seconds

এখন আমি এটি ক্যাশে "স্পর্শ" করতে পারি।

[root@xt ~]# vmtouch -vt /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5

           Files: 1
     Directories: 0
   Touched Pages: 5 (20K)
         Elapsed: 0.005313 seconds

এখন কতটা ক্যাশেড হয়েছে তা দেখতে ...

[root@xt ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5

           Files: 1
     Directories: 0
  Resident Pages: 5/5  20K/20K  100%
         Elapsed: 0.000241 seconds

3

লিনাক্স-ফিনকোরার ব্যবহার করে ক্যাশেড ফাইলগুলি দেখানোর জন্য আমি একটি খুব সাধারণ শেল স্ক্রিপ্ট লিখি। ক্যাশে যেহেতু মেমরির একটি অংশ, তাই আমার কোডটি প্রক্রিয়াটির শীর্ষে 10 টি আরএসজেডের ব্যবহার এবং প্রসেসটি খোলা ফাইলগুলি অনুসন্ধান করার জন্য lsof ব্যবহার সন্ধান করে, এই ফাইলগুলি ক্যাশে হয়েছে কিনা তা অবশেষে লিনাক্স-ফিনকোরার ব্যবহার করুন।

আমি যদি ভুল মনে করি তবে আমাকে সংশোধন করুন।

#!/bin/bash
#Author: Shanker
#Time: 2016/06/08

#set -e
#set -u
#you have to install linux-fincore
if [ ! -f /usr/local/bin/linux-fincore ]
then
    echo "You haven't installed linux-fincore yet"
    exit
fi

#find the top 10 processs' cache file
ps -e -o pid,rss|sort -nk2 -r|head -10 |awk '{print $1}'>/tmp/cache.pids
#find all the processs' cache file
#ps -e -o pid>/tmp/cache.pids

if [ -f /tmp/cache.files ]
then
    echo "the cache.files is exist, removing now "
    rm -f /tmp/cache.files
fi

while read line
do
    lsof -p $line 2>/dev/null|awk '{print $9}' >>/tmp/cache.files 
done</tmp/cache.pids


if [ -f /tmp/cache.fincore ]
then
    echo "the cache.fincore is exist, removing now"

    rm -f /tmp/cache.fincore
fi

for i in `cat /tmp/cache.files`
do

    if [ -f $i ]
    then

        echo $i >>/tmp/cache.fincore
    fi
done

linux-fincore -s  `cat /tmp/cache.fincore`

rm -f /tmp/cache.{pids,files,fincore}

1
ক্যাশে ফাইলগুলির সেট সাধারণত খোলা ফাইলগুলির ছোট সাবসেটের তুলনায় সাধারণত বড় হতে চলেছে (ক্যাশে স্থানটি ছোট না হলে)। বর্তমানে খোলা ফাইলগুলি সম্ভবত ক্যাশে উপস্থিত রয়েছে (যদি না সেগুলি দীর্ঘ-নিষ্ক্রিয় বা ক্যাশে সম্প্রতি পরিষ্কার না করা হত)। দ্রষ্টব্য: lsofপ্রক্রিয়া-ঠিকানা-স্পেসে ম্যাপযুক্ত ফাইলগুলিও রিপোর্ট করে (এবং প্রয়োজনীয়ভাবে ক্যাশে হয় না)। এছাড়াও সম্ভবত যে ফাইলগুলির বড় অংশ কেবল আংশিক / বিচ্ছিন্নভাবে ক্যাশে হবে ...
ভ্লাদ

2

আপনি পিসিস্ট্যাট (পৃষ্ঠা ক্যাশে স্ট্যাটাস) https://github.com/tobert/pcstat ব্যবহার করতে পারেন

আশা করি এটি কাউকে সাহায্য করবে।


2

আমি নিম্নলিখিত স্ক্রিপ্ট লিখেছি যা পিসিস্ট্যাট কমান্ড ব্যবহার করে সমস্ত ফাইল এবং তাদের ক্যাশে স্থিতি মুদ্রণ করে। এটি x86_64 লিনাক্স সিস্টেমের জন্য স্ব-অন্তর্ভুক্ত স্ক্রিপ্ট। এটি প্রয়োজনে পিসিস্ট্যাট ডাউনলোড করে।

প্রথম যুক্তি হ'ল বিশ্লেষণের জন্য ফাইল সিস্টেমের অবস্থান এবং দ্বিতীয় যুক্তি হ'ল ফলাফলের সংখ্যা (ক্যাশে পৃষ্ঠাগুলির সংখ্যা অনুসারে শীর্ষ এন)।

#!/bin/bash
#Exit if a variable is not set
set -o nounset
#Exit on first error
set -o errexit

if [ $# -eq 0 ]; then
echo "Usage: $0 <root-dir> [number-of-results]"
echo
echo "Example $0 /var 10"
echo "will show top 10 files in /var which are loaded in cache"
exit
fi

ROOT=$1
#Number of results to show
HOW_MANY=50
[ -n ${2-} ] && HOW_MANY=$2


SCRIPT_DIR="$( cd -P "$( dirname "$0" )" && pwd )"
if [ ! -x $SCRIPT_DIR/pcstat ]; then
(
cd $SCRIPT_DIR
rm -f pcstat
curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_64
chmod +x pcstat
)
fi

FIND="find ${ROOT} -not ( -path /proc -prune ) -not ( -path /sys -prune ) -type f -size +0c -print0"
$FIND |  xargs -0 ${SCRIPT_DIR}/pcstat -terse -nohdr | sort --field-separator=, -r -n -k 6 | head -n ${HOW_MANY}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.