প্রকৃত মেমরির ব্যবহার অনুসারে বাছাই করা শীর্ষ প্রক্রিয়াগুলি কীভাবে দেখবেন?


240

আমার 12 জি মেমরি সহ একটি সার্ভার রয়েছে। শীর্ষে একটি টুকরা নীচে দেখানো হয়েছে:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                                                                      
12979 frank  20   0  206m  21m  12m S   11  0.2  26667:24 krfb                                                                                                                                                                                                                                                          
13 root      15  -5     0    0    0 S    1  0.0  36:25.04 ksoftirqd/3                                                                                                                                                                                                                                                   
59 root      15  -5     0    0    0 S    0  0.0   4:53.00 ata/2                                                                                                                                                                                                                                                         
2155 root      20   0  662m  37m 8364 S    0  0.3 338:10.25 Xorg                                                                                                                                                                                                                                                          
4560 frank  20   0  8672 1300  852 R    0  0.0   0:00.03 top                                                                                                                                                                                                                                                           
12981 frank  20   0  987m  27m  15m S    0  0.2  45:10.82 amarok                                                                                                                                                                                                                                                        
24908 frank  20   0 16648  708  548 S    0  0.0   2:08.84 wrapper                                                                                                                                                                                                                                                       
1 root      20   0  8072  608  572 S    0  0.0   0:47.36 init                                                                                                                                                                                                                                                          
2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd

free -mশো নিম্নলিখিত:

             total       used       free     shared    buffers     cached
Mem:         12038      11676        362          0        599       9745
-/+ buffers/cache:       1331      10706
Swap:         2204        257       1946

যদি আমি সঠিকভাবে বুঝতে পারি তবে সিস্টেমে কেবল 362 এমবি উপলব্ধ মেমরি রয়েছে। আমার প্রশ্ন: কোন প্রক্রিয়া বেশিরভাগ স্মৃতি গ্রাস করছে তা আমি কীভাবে জানতে পারি?

ব্যাকগ্রাউন্ড তথ্য হিসাবে, সিস্টেম চলছে 64bit OpenSuse 12


উত্তর:


280

প্রথমে কিছুক্ষণ এই মন্ত্রটির পুনরাবৃত্তি করুন: "অব্যবহৃত স্মৃতি নষ্ট স্মৃতি"। লিনাক্স কার্নেলটি প্রচুর পরিমাণে ফাইল মেটাডেটা এবং অনুরোধ করা ফাইলগুলি প্রায় রাখে , যতক্ষণ না গুরুত্বপূর্ণ কিছু দেখায় সেই ডেটা আউট করে না until এই কারণেই আপনি চালাতে পারবেন:

find /home -type f -name '*.mp3'
find /home -type f -name '*.aac'

এবং দ্বিতীয় findউদাহরণটি হাস্যকর গতিতে চালিত করুন।

লিনাক্স খুব বেশি প্রচেষ্টা ছাড়াই মেমরির ব্যবহারে স্পাইকগুলি পরিচালনা করতে কেবল সামান্য স্মৃতি 'ফ্রি' রেখে যায়।

দ্বিতীয়ত, আপনি যে সমস্ত প্রক্রিয়াগুলি আপনার সমস্ত স্মৃতি খাচ্ছেন তা সন্ধান করতে চান; মধ্যে topব্যবহারের Mকমান্ড মেমরি ব্যবহার দ্বারা সাজাতে হয়। VIRTকলামটি উপেক্ষা করতে দ্বিধা বোধ করবেন না , এটি কেবল আপনাকে জানায় যে ভার্চুয়াল মেমরিটি বরাদ্দ করা হয়েছে, প্রক্রিয়াটি কতটা মেমরি ব্যবহার করছে না। RESমেমরির কতটা বাসিন্দা , বা বর্তমানে র‌্যামে রয়েছে তা রিপোর্ট করে (অনুরোধ করা সত্ত্বেও ডিস্কে পরিবর্তিত হওয়ার পক্ষে বা বাস্তবে কখনও বরাদ্দ দেওয়া হয়নি)।

তবে, যেহেতু প্রায় প্রতিটি প্রক্রিয়ার জন্য একবার মেমরি RESগণনা করা হবে /lib/libc.so.6, কোনও প্রক্রিয়াটি কতটা মেমরি ব্যবহার করছে এটি ঠিক একটি দুর্দান্ত ব্যবস্থা নয়। SHRকলাম প্রতিবেদন কত স্মৃতি ভাগ , এটা ভাগ করার যোগ্য হতে পারে ভাগ মাত্র আর কেউ চায় - অন্য প্রক্রিয়া, কিন্তু কোন গ্যারান্টি যে অন্য প্রক্রিয়া আসলে ভাগ করছে নেই।

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


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

@ রাব্বি, সম্ভবত এটি সত্য; /proc/meminfoএবং /proc/slabinfoফাইল বিবরণের জন্য কি কার্নেল স্টোরেজ ব্যবহার করছে - slabtopপ্রোগ্রাম খুব ভালো হয় top, কিন্তু শো যা স্লাব allocators কত বরাদ্দ হয়েছে, তাদের অনুপাত মত, ইত্যাদি
sarnold

'স্মেমে' টিপসের জন্য ধন্যবাদ - আমি চাই লিনাক্স কিছু র্যাম "নষ্ট" করতে যাতে আমার মেশিনটি দ্রুত চালাতে পারে। 'পাস' যদি ২ য় পাসে কিছুটা বেশি সময় নেয় তবে ঠিক আছে। একটি আটকে মাউস এবং হিমায়িত উইন্ডোজ যখন কোনও র‌্যাম (যা এটি অহেতুকভাবে ঝুলিয়েছে) কে সিদ্ধান্ত নিয়েছে তখন পরিষ্কার করা উচিত এবং আমি এখন যা করছি তা পুনরায় বরাদ্দ করা দরকার - বা এমনকি ডিস্কে অদলবদল করা - কোনও বিকল্প নয়। আমার কাছে এই বাক্সে 16 গিগাবাইট র‌্যাম রয়েছে এবং আমি আশা করি যে এর বেশ কয়েকটি জিবি নিখরচায় থাকবে এবং চলমান অ্যাপ্লিকেশনগুলিতে উপলব্ধ থাকবে।
জোসেফকে

@ জোসেফকে, মাউসকে সরানোর সময়সূচী অগ্রাধিকার এবং অ্যালগরিদমগুলির সাথে আরও অনেক কিছু করার আছে; যদি মাউস পয়েন্টারটি সরানোর জন্য মেমরির বরাদ্দের প্রয়োজন হয় তবে আপনি যে সফ্টওয়্যারটি ব্যবহার করছেন তাতে কিছু মারাত্মক ভুল। :)
sarnold

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

321

লিনাক্স / ইউনিক্সে শীর্ষ কমান্ড ব্যবহার করে দ্রুত টিপ ব্যবহার করুন

$ top

এবং তারপরে হিট Shift+ m(অর্থাত্ একটি মূলধন লিখুন M)।

থেকে man top

SORTING of task window
  For compatibility, this top supports most of the former top sort keys.
  Since this is primarily a service to former top users, these commands do
  not appear on any help screen.
    command   sorted-field                  supported
      A         start time (non-display)      No
      M         %MEM                          Yes
      N         PID                           Yes
      P         %CPU                          Yes
      T         TIME+                         Yes

বা বিকল্পভাবে: হিট Shift+ f, তারপরে কী টিপুন nএবং চাপুন মেমরির ব্যবহারের দ্বারা অর্ডার করতে ডিসপ্লেটি চয়ন করুন Enter। আপনি মেমরির ব্যবহার দ্বারা অর্ডার করা সক্রিয় প্রক্রিয়া দেখতে পাবেন


71
অথবা আপনি কেবল M( Shift+ m)
প্যাট্রিক

8
@ISnandar এমবিতে মেমরি দেখানোর উপায় আছে এবং% নয়
কোডেকবয়

2
হাই codecowboy, সম্ভবত আপনি তাকান করতে commandlinefu.com/commands/view/3/... আমার সার্ভারে ব্যবহৃত আমি তৃতীয় পক্ষের অ্যাপ্লিকেশন ব্যবহার করছি আরো বিস্তারিত মেমরির জন্য newrelic.com
risnandar

6
বা কেবল top -o mem -O cpu
এড়িয়ে যান

উবুন্টু 16 আমার প্রয়োজন top -o RESঅন্যথায় "অচেনা ক্ষেত্র নাম 'মেম'"
Adams


28

প্রথমে আপনার আউটপুট সম্পর্কে একটি ব্যাখ্যাfree পড়তে হবে । নীচের লাইন: আপনার কমপক্ষে 10.7 গিগাবাইট মেমরি প্রক্রিয়া দ্বারা সহজেই ব্যবহারযোগ্য।

তারপরে আপনার কোনও প্রক্রিয়াটির জন্য "মেমরির ব্যবহার" কী তা নির্ধারণ করা উচিত (এটি সহজ বা দ্ব্যর্থহীন নয়, আমাকে বিশ্বাস করুন)।

তারপরে আমরা আরও সাহায্য করতে সক্ষম হতে পারি :-)


আপনি কোথা থেকে 10.7 পেয়েছেন? বাফার / ক্যাশে থেকে [বিনামূল্যে]? লিঙ্কের জন্য ধন্যবাদ, আমি এটি পড়তে হবে।
user3111525

3
হ্যাঁ. মুল বক্তব্যটি হল মেমরিটির বেশিরভাগটি বাফার এবং ক্যাশে ব্যবহৃত হয়। কোনও প্রক্রিয়াটির আরও মেমরির প্রয়োজন হলে এই মেমরিটি এখনই "ফেলে দেওয়া" যেতে পারে। আপনি যখন ইউএসইডি পরিমাণ থেকে বাফার / ক্যাশের জন্য ব্যবহৃত মেমরির পরিমাণটি বিয়োগ করেন বা এটি বিনামূল্যে পরিমাণে যুক্ত করেন, আপনি দ্বিতীয় লাইনে নম্বর পাবেন যা কেবলমাত্র 1.3 গিগটি সত্যই ব্যবহৃত হয়েছে, বা অন্যটি থেকে দেখা যায় কোণ, আপনার 10.7 গিগ সহজেই উপলভ্য মেমরি রয়েছে (যেহেতু বাফার এবং ক্যাশে চাহিদা অনুসারে ইনস্টা-ডাম্প করা যেতে পারে)।
স্টলসভিক


17

ps aux --sort '%mem'

থেকে procps 'PS (উবুন্টু 12.04 তে ডিফল্ট) মত আউটপুট উত্পন্ন:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
tomcat7   3658  0.1  3.3 1782792 124692 ?      Sl   10:12   0:25 /usr/lib/jvm/java-7-oracle/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -D
root      1284  1.5  3.7 452692 142796 tty7    Ssl+ 10:11   3:19 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
ciro      2286  0.3  3.8 1316000 143312 ?      Sl   10:11   0:49 compiz
ciro      5150  0.0  4.4 660620 168488 pts/0   Sl+  11:01   0:08 unicorn_rails worker[1] -p 3000 -E development -c config/unicorn.rb             
ciro      5147  0.0  4.5 660556 170920 pts/0   Sl+  11:01   0:08 unicorn_rails worker[0] -p 3000 -E development -c config/unicorn.rb             
ciro      5142  0.1  6.3 2581944 239408 pts/0  Sl+  11:01   0:17 sidekiq 2.17.8 gitlab [0 of 25 busy]                                                                          
ciro      2386  3.6 16.0 1752740 605372 ?      Sl   10:11   7:38 /usr/lib/firefox/firefox

সুতরাং এখানে ফায়ারফক্স আমার গ্রাহকের 16% স্মৃতি সহ শীর্ষ গ্রাহক।

আপনি আগ্রহী হতে পারে:

ps aux --sort '%cpu'

4

নিম্নলিখিত ধাপগুলি সহ আপনি কলামটি বাছাই করতে পারেন তা নির্দিষ্ট করতে পারেন:

ধাপ:
* শীর্ষ
* শিফট + এফ
* তালিকা থেকে একটি কলাম নির্বাচন করুন
    যেমন এন মানে মেমরি অনুসারে বাছাই করা,
* টিপুন
* ঠিক আছে

1
উপরের রজনদার উত্তরটির সদৃশ।
বেনজমিং

3

আপনার টার্মিনালে এই কোডটি প্রয়োগ করে আপনি মেমরির ব্যবহার দেখতে পাবেন:

$ watch -n2 free -m
$ htop

3

প্রক্রিয়া নাম অনুসারে ব্যবহৃত মোট মেমরি কীভাবে আপ করবেন:

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

ps -e -orss=,args= |awk '{print $1 " " $2 }'| awk '{tot[$2]+=$1;count[$2]++} END {for (i in tot) {print tot[i],i,count[i]}}' | sort -n

যেমন আউটপুট

9344 docker 1
9948 nginx: 4
22500 /usr/sbin/NetworkManager 1
24704 sleep 69
26436 /usr/sbin/sshd 15
34828 -bash 19
39268 sshd: 10
58384 /bin/su 28
59876 /bin/ksh 29
73408 /usr/bin/python 2
78176 /usr/bin/dockerd 1
134396 /bin/sh 84
5407132 bin/naughty_small_proc 1432
28061916 /usr/local/jdk/bin/java 7

0

এটি সময়ে খুব দ্বিতীয়

ps -U $(whoami) -eom pid,pmem,pcpu,comm | head -n4

ধারাবাহিকভাবে আপডেট করা হচ্ছে

watch -n 1 'ps -U $(whoami) -eom pid,pmem,pcpu,comm | head -n4'

আমি এখানে কয়েকটি গুডি যুক্ত করেছি যাতে আপনি প্রশংসা করতে পারেন (বা আপনি উপেক্ষা করতে পারেন)

-n 1 প্রতি সেকেন্ডে দেখুন এবং আপডেট করুন

-U $(whoami)শুধুমাত্র আপনার প্রক্রিয়াগুলি দেখানোর জন্য। some (কিছু আদেশ) এখন মূল্যায়ন করে

| head -n4 একসাথে খালি শিরোনাম এবং 3 প্রক্রিয়াগুলি দেখানোর জন্য প্রায়শই আপনাকে কেবল উচ্চ ব্যবহারের লাইন আইটেমের প্রয়োজন হয়

${1-4} আমার প্রথম যুক্তি বলে $1 আমি 4 এ ডিফল্ট করতে চাই, যদি না আমি এটি সরবরাহ করি

আপনি যদি ম্যাক ব্যবহার করছেন তবে আপনাকে প্রথমে ঘড়ি ইনস্টল করতে হবে

brew install watch 

বিকল্পভাবে আপনি কোনও ফাংশন ব্যবহার করতে পারেন

psm(){
    watch -n 1 "ps -eom pid,pmem,pcpu,comm | head -n ${1-4}"
    # EXAMPLES: 
    # psm 
    # psm 10
}

আপনি সহজেই সিপিইউ অনুসারে বাছাই করতে পারেন যদি আপনি পরিবর্তন করেন -m থেকে-r
jasonleonhard

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