লিনাক্সে মেমরির ব্যবহার সঠিকভাবে নির্ধারণ করা


63

আমি পিএস এবং বিনামূল্যে থেকে কিছু ফলাফল দেখছি তাতে কিছুটা বিভ্রান্ত হয়ে পড়েছি ।

আমার সার্ভারে, এটি ফলাফল free -m

[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          2048       2033         14          0         73       1398
-/+ buffers/cache:        561       1486
Swap:         2047         11       2036

লিনাক্স কীভাবে মেমরি পরিচালনা করে তা সম্পর্কে আমার বোঝাটি হ'ল এটি র‌্যামে ডিস্কের ব্যবহার সঞ্চয় করবে, যাতে প্রতিটি পরবর্তী অ্যাক্সেস দ্রুত হয়। আমি বিশ্বাস করি এটি "ক্যাশেড" কলামগুলি দ্বারা নির্দেশিত। অতিরিক্তভাবে, "বাফার" কলামে নির্দেশিত বিভিন্ন বাফার র‍্যামে সংরক্ষণ করা হয়।

সুতরাং যদি আমি সঠিকভাবে বুঝতে পারি তবে "আসল" ব্যবহারটি "- / + বাফারস / ক্যাশে" এর "ব্যবহৃত" মান বা এই ক্ষেত্রে 561 হিসাবে বিবেচিত হবে।

সুতরাং এটি সবই সঠিক বলে ধরে নেওয়া, যে অংশটি আমাকে ফেলে দেয় তা হ'ল ফলাফল ps aux

psফলাফলগুলি সম্পর্কে আমার বোঝাপড়াটি হ'ল the ষ্ঠ কলাম (আরএসএস), মেমরির জন্য প্রক্রিয়াটি কিলোবাইটগুলিতে ব্যবহার করে।

সুতরাং যখন আমি এই আদেশটি চালাচ্ছি:

[root@server ~]# ps aux | awk '{sum+=$6} END {print sum / 1024}'
1475.52

ফলাফলটি "- / + বাফারস / ক্যাশে" এর "ব্যবহৃত" কলামটি হওয়া উচিত নয় free -m?

সুতরাং, আমি কীভাবে লিনাক্সে কোনও প্রক্রিয়ার মেমরির ব্যবহার সঠিকভাবে নির্ধারণ করতে পারি? স্পষ্টতই আমার যুক্তি ত্রুটিযুক্ত।


এই প্রশ্নটি বেশ জনপ্রিয় এবং আমি মনে করি আমার অন্যদিনের মতোhtop একই প্রশ্নের একটি লেখকের আমার উত্তর ভাগ করা উচিত ... / proc / meminfo (এইচটিপি এর মতো) থেকে মেমরির ব্যবহার কীভাবে গণনা করতে হবে
tgogos

উত্তর:


57

এই ঠিক একই প্রশ্নটি অন্য দিন সার্ভারফল্টে জিজ্ঞাসা করা হয়েছিল :-)

লিনাক্স ভার্চুয়াল মেমরি সিস্টেমটি এত সহজ নয়। আপনি শুধু সব আরএসএস ক্ষেত্র পর্যন্ত যোগ এবং মান রিপোর্ট পেতে পারে না usedদ্বারা free। এর অনেকগুলি কারণ রয়েছে তবে আমি বেশ কয়েকটি বৃহত্তমকে হিট করব।

  • যখন একটি প্রক্রিয়া কাঁটাচামচ করে, পিতা-মাতা এবং শিশু উভয়ই একই আরএসএসের সাথে দেখাবে। তবে লিনাক্স নিয়োগ করে copy-on-writeযাতে উভয় প্রক্রিয়া সত্যই একই মেমরি ব্যবহার করে। যখন কোনও প্রক্রিয়া মেমরিটি পরিবর্তন করে তবেই এটি আসলে নকল হবে। সুতরাং freeএটি topআরএসএসের যোগফলের চেয়ে কম হবে ।

  • আরএসএসের মানটিতে ভাগ করা মেমরি অন্তর্ভুক্ত নয়। কারণ ভাগ করা মেমরি কোনও একটি প্রক্রিয়ার মালিকানাধীন নয়, topএটি আরএসএসে অন্তর্ভুক্ত করে না। সুতরাং এটি freeসংখ্যার চেয়ে topআরএসএসের চেয়ে বড় হবে ।


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

এই উত্তরের সমস্যাটি হ'ল আরএসএস এবং এসএইচআর এর যোগফল গণনা করা প্রায়শই ব্যবহৃত মেমরির থেকে অনেক কম দেয়। উদাহরণস্বরূপ আমার কাছে থাকা ভিপিএসে ব্যবহৃত মেমরিটি 380 এমবি এবং সমস্ত আরএসএস এবং এসএইচআর এর যোগফল 90MB হয়।
ব্যবহারকারী 239558

2
@ ব্যবহারকারী 239558 আমি উত্তরে যেমন উল্লেখ করেছি, সংখ্যাগুলি সংযোজন না করার অনেকগুলি কারণ রয়েছে, আমি কেবল তার মধ্যে 2 টি তালিকাভুক্ত করেছি। অন্যান্য সংখ্যা অনেক আছে; ক্যাশে, স্ল্যাব, বিশাল পৃষ্ঠাগুলি, ইত্যাদি
প্যাট্রিক

2
সম্ভবত আপনি এই উত্তর দেওয়ার বছর পরে, আমি এখনও (কমপক্ষে) একটি বিভ্রান্তি আছে। আপনি বলেছিলেন যে আরএসএসের মানটি ভাগ করা মেমরিকে অন্তর্ভুক্ত করে না, তবে এই উত্তরে বলা হয়েছে যে " এই লাইব্রেরির পৃষ্ঠাগুলি আসলে স্মৃতিতে থাকা অবধি ভাগ করা লাইব্রেরিগুলির স্মৃতি অন্তর্ভুক্ত থাকে"। এখন কোনটি বিশ্বাস করতে হবে তা আমি জানি না ... আমি এখানে কিছু সূক্ষ্ম পার্থক্য মিস করছি ...
নাইট্রি

1
@ নাইট্রি "শেয়ার করা লাইব্রেরি"! = "ভাগ করা মেমরি"। ভাগ করা মেমরি মত জিনিস shmgetবা mmap। মেমরি স্টাফের চারপাশে শব্দগুলি খুব কৃপণ। ভুল জায়গায় ভুল শব্দটি ব্যবহার করা একটি বাক্যের অর্থ পুরোপুরি স্ক্রু করতে পারে।
প্যাট্রিক

30

যদি আপনি মেমরি নম্বরগুলির সন্ধান করেন যা সংযোজনকারী স্মিমে সংক্ষিপ্ত বিবরণ রয়েছে :

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

শারীরিক মেমরির বৃহত অংশগুলি সাধারণত একাধিক অ্যাপ্লিকেশনের মধ্যে ভাগ করা হয়, তাই আবাসিক সেট আকার (আরএসএস) হিসাবে পরিচিত মেমরির ব্যবহারের মানক মেমরিটি উল্লেখযোগ্যভাবে মেমরির ব্যবহারকে তাত্পর্যপূর্ণ করে তুলবে। পিএসএস পরিবর্তে বাস্তবের পরিমাপ দেওয়ার জন্য প্রতিটি ভাগ করা জায়গার প্রতিটি অ্যাপ্লিকেশনের "ন্যায্য ভাগ" পরিমাপ করে।

উদাহরণস্বরূপ:

# smem -t
  PID User     Command                         Swap      USS      PSS      RSS
...
10593 root     /usr/lib/chromium-browser/c        0    22868    26439    49364 
11500 root     /usr/lib/chromium-browser/c        0    22612    26486    49732 
10474 browser  /usr/lib/chromium-browser/c        0    39232    43806    61560 
 7777 user     /usr/lib/thunderbird/thunde        0    89652    91118   102756 
-------------------------------------------------------------------------------
  118 4                                       40364   594228   653873  1153092 

সুতরাং PSSকারণ এটি একাউন্টে ভাগ করা মেমোরি লাগে আকর্ষণীয় কলাম এখানে।
ভিন্ন RSSএটি যোগ করতে আপ এটি অর্থপূর্ণ নয়। আমরা এখানে ইউজারল্যান্ড প্রক্রিয়াগুলির জন্য মোট 654Mb পাই।

সিস্টেম-ব্যাপী আউটপুট বাকী সম্পর্কে বলে:

# smem -tw
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory        345784     297092      48692 
userspace memory             654056     181076     472980 
free memory                   15828      15828          0 
----------------------------------------------------------
                            1015668     493996     521672 

সুতরাং 1 জিবি র‌্যাম মোট = 654 এমবি ইউজারল্যান্ড প্রসেস করে + 346 এমবি কার্নেল মেম + 16 এমবি ফ্রি
(কিছু এমবি দিন বা নিন)

সামগ্রিকভাবে প্রায় অর্ধেক মেমরি ক্যাশে (494 এমবি) ব্যবহার করা হয়।

বোনাস প্রশ্ন : এখানে ইউজারল্যান্ড ক্যাশে বনাম কার্নেল ক্যাশে কী?


কিছু দেখার জন্য বিটিডব্লিউ:

# smem  --pie=name

এখানে চিত্র বর্ণনা লিখুন


14

একটি সত্যই ভাল সরঞ্জাম হ'ল pmapযা কোনও নির্দিষ্ট প্রক্রিয়ার জন্য মেমরির বর্তমান ব্যবহারের তালিকা দেয়:

pmap -d PID

এটি সম্পর্কে আরও তথ্যের জন্য ম্যান পৃষ্ঠাটি man pmapদেখুন এবং 20 লিনাক্স সিস্টেম মনিটরিং সরঞ্জামগুলি প্রতিটি সিসএডমিনকে জানা উচিত , আমার লিনাক্স বাক্স সম্পর্কে তথ্য পেতে আমি সর্বদা যে দুর্দান্ত সরঞ্জামগুলি ব্যবহার করি তা তালিকাভুক্ত করা উচিত।


এটি একটি দুর্দান্ত সরঞ্জাম, তবে এটি সত্যিই আমার সমস্যার সমাধান করে না। আমি কীভাবে সার্ভারে "প্রকৃত" মেমরির ব্যবহার কার্যকরভাবে নির্ধারণ করতে পারি তা বোঝার চেষ্টা করছি।
গোল্ডেননিউবি

3
@ গোল্ডেন নিউবি কোনও প্রক্রিয়াটির "আসল" মেমরির ব্যবহারের মতো জিনিস নেই। সিস্টেমের আসল মেমরির ব্যবহার যা freeআপনাকে জানায়।
গিলস

pmap -x PIDআরএসএস কলামও অন্তর্ভুক্ত থাকে যা প্রায়শই ধারণা পেতে বেশ কার্যকর যেখানে কোনও প্রক্রিয়াটির আরএসএসের যোগফল (যেমন পর্যবেক্ষণ করা হয়েছে যেমন topথেকে এসেছে)।
ম্যাক্সচলেপজিগ

10

শীর্ষে রান করুন, ক্ষেত্রগুলি যুক্ত করতে hসাহায্যের জন্য হিট fকরুন। আপনি নিম্নলিখিত ক্ষেত্রগুলি যুক্ত করতে পারেন:

  • RSS অ্যাপ্লিকেশনটি কতটা শারীরিক মেমরি ব্যবহার করছে
  • CODE প্রক্রিয়াটির এক্সিকিউটেবল কোডটি ব্যবহার করছে মোট পরিমাণ মেমরি
  • DATA - কোনও প্রক্রিয়ার ডেটা এবং স্ট্যাকের জন্য নিবেদিত মোট মেমরি (কেবি)

এই 3 এর মধ্যে আপনার দুর্দান্ত সঠিক ফলাফল হওয়া উচিত। আমি প্রস্তাবিত শীর্ষ htopবা আপনি আরও বিশদ প্রতিস্থাপন ব্যবহার করতে পারেন atop

সম্পাদনা: আপনি যদি সত্যিই বিস্তারিত তথ্য চান তবে প্রায় ভুলে গেছেন। নীচের ফাইলটি পিআইডি এবং বিড়ালটি সন্ধান করুন।

PID=123

cat /proc/123/status

সম্পাদনা 2: আপনি যদি এটি সন্ধান করতে পারেন বা বইটি পেতে পারেন:

লিনাক্স পারফরম্যান্স অনুকূল করা: লিনাক্স পারফরম্যান্স সরঞ্জামগুলির জন্য একটি হাত-নির্দেশিকা

-এর একটি বিভাগের অধ্যায় 5: পারফরম্যান্স সরঞ্জামগুলি: প্রক্রিয়া-নির্দিষ্ট মেমরি - এটি আপনার চেয়ে যতটা চাই তার চেয়ে আরও বেশি তথ্য রয়েছে।


ঠিক আছে শীর্ষে ডিফল্টর মধ্যে আরএসএসের আকার রয়েছে। শীর্ষগুলি আমার উদাহরণে "পিএস অক্স" এর মতো অভিন্ন ফলাফল দেয়। আমার প্রশ্নটি হল, সমস্ত সার্ভারে সম্মিলিত আরএসএস "সক্রিয়" মেমরির ব্যবহারের চেয়ে অনেক বেশি কীভাবে?
গোল্ডেননিউবি

5

psআপনাকে প্রতিটি প্রক্রিয়া দ্বারা ব্যবহৃত মেমরির পরিমাণ দেয়। সেই মেমরির কিছু হ'ল এমএম্যাপ করা ফাইল, যা ক্যাশের অধীনে গণনা করা হয়। সেই মেমরিটির কয়েকটি (বিশেষত কোড) অন্যান্য প্রক্রিয়াগুলির সাথে ভাগ করা হয়, তাই আপনি আরএসএসের মানগুলি যুক্ত করলে এটি একাধিকবার গণনা করা হয়।

"এই প্রক্রিয়াটি কতটা স্মৃতি ব্যবহার করে?" এর সঠিক কোনও উত্তর নেই, কারণ এটি একমাত্র প্রক্রিয়ার উপর নির্ভর করে না, এটি পরিবেশের উপরও নির্ভর করে। প্রক্রিয়াটির "মেমরির ব্যবহার" হিসাবে আপনি কল করতে পারেন এমন অনেকগুলি মান রয়েছে এবং তারা মেলে না বা যুক্ত হয় না কারণ তারা বিভিন্ন জিনিস গণনা করছে।


4

যেমন অন্যরা সঠিকভাবে নির্দেশ করেছে, কোনও প্রক্রিয়া দ্বারা ব্যবহৃত প্রকৃত মেমরির ভাগ করা অঞ্চলগুলি এবং এমএমপ'যুক্ত ফাইলগুলি কী এবং কী কী তা ব্যবহার করা শক্ত।

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

বিষয় জটিল করতে, লিনাক্স আপনি করতে পারবেন overcommit আপনার মেমরি। আপনি যখন মেমোরি malloc করেন, আপনি স্মৃতি গ্রাস করার আপনার উদ্দেশ্যটি উল্লেখ করছেন। আপনার বরাদ্দ হওয়া "র‌্যাম" এর নতুন পৃষ্ঠায় বাইট না লিখে অবধি সত্যিই ঘটে না। আপনি নিজের মতো এটি একটি সামান্য সি প্রোগ্রাম লিখে এবং চালিয়ে প্রমাণ করতে পারেন:

// test.c
#include <malloc.h>
#include <stdio.h>
#include <unistd.h>
int main() {
    void *p;
    sleep(5)
    p = malloc(16ULL*1024*1024*1024);
    printf("p = %p\n", p);
    sleep(30);
    return 0;
}

# Shell:
cc test.c -o test && ./test &
top -p $!

১GB জিবি র‍্যামেরও কম র‌্যাম সহ একটি মেশিনে এটি চালান এবং ভোইলা! আপনি সবেমাত্র ১GB জিবি মেমরি পেয়েছেন! (না সত্যিই না).

লক্ষ্য করুন topআপনি "ভিআইআরটি" 16.004 জি হিসাবে দেখেন তবে% এমইএম 0.0 হয়

এটি আবার ভালগ্রাইন্ড দিয়ে চালান:

# Shell:
valgrind --tool=massif ./test &
sleep 36
ms_print massif.out.$! | head -n 30

এবং ম্যাসিফ "সমস্ত বরাদ্দের যোগফল () = 16 গিগাবাইট" বলে। সুতরাং এটি খুব আকর্ষণীয় নয়।

কিন্তু, আপনি যদি এটি একটি বুদ্ধিমান প্রক্রিয়াতে চালনা করেন :

# Shell:
rm test test.o
valgrind --tool=massif cc test.c -o test &
sleep 3
ms_print massif.out.$! | head -n 30

--------------------------------------------------------------------------------
Command:            cc test.c -o test
Massif arguments:   (none)
ms_print arguments: massif.out.23988
--------------------------------------------------------------------------------


    KB
77.33^                                                                       :
     |                                                                      #:
     |                                                                :@::@:#:
     |                                                           :::::@@::@:#:
     |                                                         @:: :::@@::@:#:
     |                                                     ::::@:: :::@@::@:#:
     |                                             ::@:::@:::::@:: :::@@::@:#:
     |                                            @::@:::@:::::@:: :::@@::@:#:
     |                                            @::@:::@:::::@:: :::@@::@:#:
     |                      :@@@@@@@@@@@@@@@@@@@@:@::@:::@:::::@:: :::@@::@:#:
     |                      :@@                  :@::@:::@:::::@:: :::@@::@:#:
     |                    :@:@@                  :@::@:::@:::::@:: :::@@::@:#:
     |                    :@:@@                  :@::@:::@:::::@:: :::@@::@:#:
     |                   :@@:@@                  :@::@:::@:::::@:: :::@@::@:#:
     |                   :@@:@@                  :@::@:::@:::::@:: :::@@::@:#:
     |              :@::::@@:@@                  :@::@:::@:::::@:: :::@@::@:#:
     |          :::::@::::@@:@@                  :@::@:::@:::::@:: :::@@::@:#:
     |        :::::::@::::@@:@@                  :@::@:::@:::::@:: :::@@::@:#:
     |       ::::::::@::::@@:@@                  :@::@:::@:::::@:: :::@@::@:#:
     |       ::::::::@::::@@:@@                  :@::@:::@:::::@:: :::@@::@:#:
   0 +----------------------------------------------------------------------->Mi
     0                                                                   1.140

এবং এখানে আমরা দেখতে পেয়েছি (খুব অনুগতভাবে এবং খুব উচ্চ আত্মবিশ্বাসের সাথে) যে সংকলকটি 77KB গাদা বরাদ্দ করেছে।

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

এছাড়াও, নিম্নলিখিত তুলনা করুন এবং বিপরীতে:

এমএমএপি () একটি 1 জিবি ফাইল। আপনার ভিএমএস আকারটি 1 + জিবি হবে। তবে আপনি আবাসিক সেট আকার হবেন কেবলমাত্র সেই ফাইলের অংশ যা আপনি পৃষ্ঠাতে তৈরি করেছেন (সেই অঞ্চলে কোনও পয়েন্টারকে ডিফারেন্স করে)। এবং আপনি যদি পুরো ফাইলটি "পড়" তখন, শেষের দিকে এসে পৌঁছানোর পরে, কার্নেলটি ইতিমধ্যে সূচনা পৃষ্ঠাটি বের করে ফেলেছে (এটি করা সহজ কারণ কার্নেল জানে যে ঠিক কীভাবে / কোথায় এই পৃষ্ঠাগুলি প্রতিস্থাপন করতে হবে যদি আবার বিবেচনা করা হয়) )। উভয় ক্ষেত্রেই, ভিএমএসাইজ বা আরএসএস উভয়ই আপনার স্মৃতি "ব্যবহারের" জন্য একটি ভাল সূচক নয়। আপনি আসলে ম্যালোক () এর এড কিছুই করেননি।

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

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


আমি আপনার জন্য একটি প্রশ্ন পেয়েছি। আমি একটি প্রক্রিয়া পেয়েছি যা এর সমস্ত এমএম্যাপ করা ফাইলগুলি মেলক () করে। এই স্মৃতিশক্তির কতটি সক্রিয়ভাবে ব্যবহৃত হয়েছে তা নির্ধারণ করার কোনও উপায় আছে - এটির কতটুকু পড়া হয়েছে বা লিখিতভাবে লেখা হয়েছে, বলুন, গত মিনিট বা দু'টি?
মাইকেল মার্টিনেজ

2

এটি ব্যবহার করে দেখুন: এটি আপনাকে এমবিতে চলমান সমস্ত প্রক্রিয়া দ্বারা ব্যবহৃত মোট র্যাম দেয়

ps -eo size,pid,user,command --sort -size | awk '
  { hr=$1/1024 ; printf("%13.2f Mb ",hr) } 
  { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }
  ' | awk '{total=total + $1} END {print total}'

sizeরিপোর্ট দ্বারা psপ্রকৃত মেমরির ব্যবহার সামান্য সম্পর্ক নেই। এটি প্রতিটি প্রক্রিয়ার ভার্চুয়াল আকার যা অগত্যা মেমরি বরাদ্দ করা হয় না। এটি বরাদ্দকৃত কিছু বিভাগগুলিও অন্তর্ভুক্ত করে না।
ম্যাট

-2

এটি ব্যবহারকারীদের দ্বারা মেমরির কত ব্যবহারকারী তা আপনাকে দেখিয়ে দেবে ..

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && {  printf "%-10s%-0.1f\n" $old_user $total_mem;
                                    total_mem=0; }
        total_mem="$(echo $m + $total_mem | bc)"
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#EOF

-3

% এ মেমরির ব্যবহার খুঁজে পেতে এই কমান্ডটি ব্যবহার করুন।

স্মৃতি ব্যবহৃত:

grep Mem | awk '{print $3/$2 * 100.0}'

অব্যবহৃত মেমরি

grep Mem | awk '{print $4/$2 * 100.0}'

3
ত্রুটি, এটি কিছুই করবে না। grepশুধু ইনপুট জন্য অপেক্ষা সেখানে বসে থাকবে।
ম্যাচটিএম

1
এটি হওয়া উচিত ছিলfree -m | grep Mem | awk '{print $3/$2 * 100.0}'
ভিজানগাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.