কীভাবে লিনাক্স অদলবদল ব্যবহার করছে বা অদলবদলে রয়েছে তা কীভাবে খুঁজে পাবেন?


12

আমার কাছে ভার্চুয়াল লিনাক্স (ফেডোরা 17) সার্ভার রয়েছে 28 জিবি র‌্যাম এবং 2 জিবি সোয়্যাপের সাথে। সার্ভারটি একটি মাইএসকিউএল ডিবি চালাচ্ছে যা বেশিরভাগ র‌্যাম ব্যবহারের জন্য সেট আপ করা হয়।

কিছু সময় চলার পরে সার্ভারটি অনাকাঙ্ক্ষিত পৃষ্ঠাগুলি অদলবদল করতে অদলবদল শুরু করে। এটি ঠিক আছে যেহেতু আমার অদলবদল ডিফল্ট 60 এ এবং এটি প্রত্যাশিত আচরণ।

আশ্চর্যের বিষয়টি হ'ল শীর্ষ / মেমিনফোতে সংখ্যাগুলি প্রক্রিয়াগুলি থেকে প্রাপ্ত তথ্যের সাথে মিলে না। অর্থাৎ সার্ভার এই সংখ্যাগুলি রিপোর্ট করছে:

/proc/meminfo:
SwapCached:        24588 kB
SwapTotal:       2097148 kB
SwapFree:         865912 kB

top:
Mem:  28189800k total, 27583776k used,   606024k free,   163452k buffers
Swap:  2097148k total,  1231512k used,   865636k free,  6554356k cached

যদি আমি /server//a/423603/98204 থেকে স্ক্রিপ্টটি ব্যবহার করি তবে এটি যুক্তিসঙ্গত সংখ্যা (বাশ'স, সিস্টেমড, ইত্যাদি দ্বারা অদলবদল করা কয়েকটি এমবি) এবং মাইএসকিউএল থেকে একটি বড় বরাদ্দের রিপোর্ট করে (আমি প্রচুর আউটপুট লাইন বাদ দিয়েছি) ):

892        [2442] qmgr -l -t fifo -u
896        [2412] /usr/libexec/postfix/master
904        [28382] mysql -u root
976        [27559] -bash
984        [27637] -bash
992        [27931] SCREEN
1000       [27932] /bin/bash
1192       [27558] sshd: admin@pts/0
1196       [27556] sshd: admin [priv]
1244       [1] /usr/lib/systemd/systemd
9444       [26626] /usr/bin/perl /bin/innotop
413852     [31039] /usr/libexec/mysqld --basedir=/usr --datadir=/data/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/data/mysql/err --open-files-limit=8192 --pid-file=/data/mysql/pid --socket=/data/mysql/mysql.sock --port=3306
449264   Total Swap Used

সুতরাং আমি যদি স্ক্রিপ্ট আউটপুট সঠিকভাবে পাই তবে মোট সোয়াপ ব্যবহার 449264 কে = সিএ হওয়া উচিত। মাইএসকিএল সহ 440 এমবি সিএ ব্যবহার করে অদলবদলের 90%।

প্রশ্নটি হল কেন এটি শীর্ষ এবং মেমিনফো সংখ্যার থেকে এত আলাদা? সমস্ত প্রক্রিয়া থেকে অদলবদলের ব্যবহারের সংমিশ্রণের পরিবর্তে অদলবদলে আসলে কী আছে তা দেখার জন্য কীভাবে "ডাম্প" করার উপায় আছে?

ইস্যুটি বিশ্লেষণ করার সময় আমি বিভিন্ন ধারণা নিয়ে এসেছি তবে সেগুলি সমস্তই ভুল বলে মনে হচ্ছে:

  1. স্ক্রিপ্ট আউটপুট কেবি তে নেই। এটি 512 বা 4KB ইউনিটে থাকলেও এটি মেলে না। আসলে অনুপাত (1200: 440) প্রায় 3: 1 যা "অদ্ভুত" সংখ্যা।
  2. অদলবদলে কিছু পৃষ্ঠা রয়েছে যা /server//a/477664/98204 এ উল্লিখিত প্রক্রিয়াগুলির মধ্যে একরকম ভাগ করে নেওয়া হয়েছে । যদি এটি সত্য হয় তবে কীভাবে আমি এরকম ব্যবহৃত মেমরির প্রকৃত সংখ্যাটি খুঁজে পেতে পারি? আমার অর্থ এটির জন্য সিসিএ 800MB পার্থক্য করা দরকার। এবং এই পরিস্থিতিতে ঠিক শোনাচ্ছে না।
  3. ইতিমধ্যে সমাপ্ত প্রক্রিয়া দ্বারা অদলবদলে ব্যবহৃত কিছু "পুরানো" পৃষ্ঠা রয়েছে। আমি কিছু মনে করব না যে আমি যদি এই "মুক্তযোগ্য" অদলবদলটি কতটা খুঁজে পেতে পারি।
  4. অদলবদলে এমন পৃষ্ঠাগুলি রয়েছে যা মেমোরিতে ফিরে অদলবদল হয়ে গেছে এবং কেবলমাত্র যদি তারা র‌্যামে পরিবর্তন না করে এবং /server//a/100636/98204 তে উল্লিখিতভাবে আবার অদলবদল করা দরকার তখনই অদলবদল হয় । তবে অদলবদলের মানটি কেবল 24MB।

আশ্চর্যের বিষয় হ'ল অদলবদলের ব্যবহার ধীরে ধীরে বৃদ্ধি পাচ্ছে যখন স্ক্রিপ্ট থেকে যোগফল প্রায় একই রকম। সর্বশেষ 3 দিনে ব্যবহৃত অদলবদল 1100MB থেকে বর্তমান 1230MB তে বেড়েছে যখন যোগফল 430MB থেকে বর্তমান 449MB (সিএ) হয়েছে।

সার্ভারে পর্যাপ্ত ফ্রি (সক্ষম) র‌্যাম রয়েছে তাই আমি কেবল অদলবদল বন্ধ করে এটিকে আবার চালু করতে পারি। অথবা আমি সম্ভবত 0 এ অদলবদল সেট করতে পারলাম তাই যদি অন্য কোনও উপায় না হয় তবে অদলবদলটি কেবলমাত্র ব্যবহৃত হবে। তবে আমি ইস্যুটি সমাধান করতে বা কমপক্ষে এটির কারণ কী তা খুঁজে বের করতে চাই।


আপনি যেমন বলছেন আপনার কেবলমাত্র vm.swppiness = 0 (বা 1) সেট করতে হবে এবং অদলবদল ও অদলবদল
HTTP500

তবে এটি সমস্যার সমাধান করবে না। আমি ধরে নিচ্ছি যে আমি অদলবদল 60০ এ ফিরে সেট করলে আবার অদলবদল বাড়তে শুরু করবে বা যদি 0 বা 1 এ রাখি তবে এটি ব্যবহার করা হবে না (যদি না সার্ভার স্মৃতি থেকে বেরিয়ে যায়)
Radek Hladík

এটি যদি কোনও ডিবি সার্ভার হয় তবে এটি কেবলমাত্র জরুরি অবস্থার মধ্যে অদলবদল ব্যবহার করা উচিত যাতে আপনার এটি সর্বদা 0 (বা 1) এ সেট করা উচিত।
HTTP500

এটি সত্য এবং এটি সম্ভবত আমি যা করতে যাচ্ছি যদি আমি এই সমস্যার কারণ খুঁজে না পাই ... তবে অন্যদিকে সার্ভারে প্রচুর ছোট ডিবি রয়েছে যা খুব বিক্ষিপ্তভাবে ব্যবহৃত হয় এবং আমি তাদের ধারণাটি পছন্দ করি সিস্টেমগুলি যখন তারা ব্যবহার না করছে তাদের দ্বারা অদলবদল ... তবে আমি মনে করি যে মাইএসকিউএল এটি নিজেই পরিচালনা করতে সক্ষম হবে ...
রাদেক হ্ল্যাডাক

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

উত্তর:


9

ফেডোরা 18 এবং smemতারপরে রেপোতে রয়েছে। আপনি পাইথন স্ক্রিপ্ট ডাউনলোড করতে এবং উত্স থেকে ইনস্টল করতে পারেন ।

আমার মেশিন থেকে এখানে একটি নমুনা আউটপুট (কিছুটা স্নিপড এবং অজ্ঞাতনামা):

# smem -s swap -t -k -n
  PID User     Command                         Swap      USS      PSS      RSS 
20917 1001     bash                               0     1.1M     1.1M     1.9M 
28329 0        python /bin/smem -s swap -t        0     6.3M     6.5M     7.4M 
 2719 1001     gnome-pty-helper               16.0K    72.0K    73.0K   516.0K 
  619 0        @sbin/mdadm --monitor --sca    28.0K    72.0K    73.0K   248.0K 

[big snip]

32079 42       gnome-shell --mode=gdm         41.9M     1.9M     2.0M     5.0M 
32403 1001     /opt/google/chrome/chrome -    43.1M   118.5M   119.4M   132.3M 
 4844 1002     /opt/google/chrome/chrome      48.1M    38.1M    41.9M    51.9M 
 5411 1002     /opt/google/chrome/chrome -    54.6M    33.4M    33.5M    36.8M 
 5624 1002     /opt/google/chrome/chrome -    72.4M    54.9M    55.5M    65.7M 
24328 1002     /opt/Adobe/Reader9/Reader/i    77.5M     1.9M     2.0M     5.2M 
 4921 1002     /opt/google/chrome/chrome -   147.2M   258.4M   259.4M   272.0M 
-------------------------------------------------------------------------------
  214 14                                       1.1G     1.1G     1.2G     1.7G 

উত্সটি সরবরাহ করে smemcapযে সমস্ত প্রাসঙ্গিক ডেটা সংরক্ষণ করবে যাতে এটিতে পরে গন্ধটি চালানো যায়।

   To  capture  memory statistics on resource-constrained systems, the the
   smem source includes a utility named  smemcap.   smemcap  captures  all
   /proc entries required by smem and outputs them as an uncompressed .tar
   file to STDOUT.  smem can analyze the output using the --source option.
   smemcap is small and does not require Python.

1
F17 রেপো থেকে Smem কাজ (একটি খালি তালিকা দেখিয়েছেন) জানি না, কিন্তু উৎস থেকে এক কাজ করেন এবং অন্যদের :-) 392.6M TOTAL এর বাইরে মাইএসকিউএল 358.1M যেমন প্রায় একই সংখ্যার দেখানো হয়, যখন উপরের শো ব্যবহৃত 1191224k
Radek Hladík

4

আপনার অন্য স্ক্রিনটিতে এই স্ক্রিপ্টটি পরীক্ষা করা উচিত, কারণ আমার সিস্টেমটি সঠিকভাবে অদলবদল দেখায়:

# Your_script.sh
111280   Total Swap Used
# free
Swap:     33551716     120368   33431348

খুব কাছেই 111280 ~ = 120368।

এছাড়াও, এই স্ক্রিপ্টটি দেখুন:

প্রো / ইন / প্রো / এর জন্য; do cat $ proc / smaps 2> / dev / null | awk '/ সোয়াপ / {সোয়াপ + = $ 2} END {মুদ্রণ অদলবদল "\ t' readlink $proc/exe'"}'; সম্পন্ন | সাজানো-এন | awk '{মোট + = $ 1} / [0-9] /; শেষ {মুদ্রণ মোট "\ ttot"}'

এই থ্রেড থেকে:

/unix/71714/linux-total-swap-used-swap-used-by-processes


উল্লিখিত স্ক্রিপ্টটি একই ফলাফলগুলি ফিরিয়ে দিচ্ছে ... 364920 / usr / lixec / mysqld 400372 মোট
রাদেক হ্লাদেক

যখন আমি অন্যান্য সার্ভারে খুব কম স্বাপের ব্যবহারের সাথে স্ক্রিপ্টটি চেষ্টা করেছি (50MB) এটিতে মোট সিসিএ 72MB রিপোর্ট করা হয়েছে :-) পরে আমি এটি কিছু অপ-উত্পাদনের সার্ভারে সিমুলেট করতে হবে ...
রাদেক হ্লাদেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.