আমি যদি একটি 'পিএস-শেফ' করি তবে আমি প্রতিটি প্রক্রিয়াটির মেমরির ব্যবহারটি কীভাবে প্রদর্শন করতে পারি?


24

লিনাক্সে আমি কীভাবে প্রতিটি প্রক্রিয়াটির মেমরি ব্যবহার প্রদর্শন করতে পারি ps -ef? আমি প্রতিটি অগ্রগতির 'ভার্চুয়াল মেমরি', 'রেজ মেমরি', 'ভাগ করা মেমরি' দেখতে চাই। আমি এটি মাধ্যমে পেতে পারি top, তবে আমি একই তথ্য চাই ps -efযাতে আমি grepআমার প্রক্রিয়া নামের সাথে আউটপুটটি পাইপ করতে পারি।

উত্তর:


8

পিএস এর মাধ্যমে মেমরির ব্যবহার প্রাপ্তি অবিশ্বাস্য। আপনার যদি আরও নতুন কার্নেল থাকে তবে এটি / proc / pid # / smaps সমর্থন করে যা আপনাকে প্রতিটি প্রক্রিয়া মেমরির ব্যবহার সম্পর্কে কিছু বিশদ তথ্য দেয়। নীচে প্রতিটি প্রক্রিয়া খোলা এবং আকার, আরএসএস, পিএসএস এবং ভাগ করে নেওয়া পরিষ্কার / নোংরা ব্যবহারের জন্য লুপ করার জন্য একটি সুন্দর নোংরা এবং দ্রুত স্ক্রিপ্ট রয়েছে। আশা করি এটি কোনও উপায়ে কার্যকর হতে পারে।

#!/bin/bash

for pid in $(ps -ef | awk '{print $2}'); do
    if [ -f /proc/$pid/smaps ]; then
            echo "* Mem usage for PID $pid"
            echo "-- Size:"
            cat /proc/$pid/smaps | grep -m 1 -e ^Size: | awk '{print $2}'
            echo "-- Rss:"
            cat /proc/$pid/smaps | grep -m 1 -e ^Rss: | awk '{print $2}'
            echo "-- Pss:"
            cat /proc/$pid/smaps | grep -m 1 -e ^Pss: | awk '{print $2}'
            echo "Shared Clean"
            cat /proc/$pid/smaps | grep -m 1 -e '^Shared_Clean:' | awk '{print $2}'
            echo "Shared Dirty"
            cat /proc/$pid/smaps | grep -m 1 -e '^Shared Dirty:' | awk '{print $2}'
    fi
done

1
আপনার আকার কলামটি সংযুক্ত করা উচিত। নীচে ezsmith এর উত্তর দেখুন।
বেসিল এ

11

ps ef -o command,vsize,rss,%mem,size

আমি ভাগ করা মেমরির জন্য কোনও বিকল্প খুঁজে পাইনি, তবে আমি মোট শারীরিক মেমরির% এবং প্রক্রিয়াটি স্যুপ আউট করার জন্য প্রয়োজনীয় পরিমাণে স্ব্যাপস্পেসের জন্য বিকল্পগুলি পেয়েছি। এটি এবং আরও অনেকগুলি PS এর ম্যান পেজে নথিভুক্ত।


লিনাক্স প্রতিটি প্রক্রিয়াটির জন্য মেমরিতে ভাগ করে নেওয়া মেমরির অ্যাকাউন্ট করে, যা আপনার যদি একটি লার্জ ভাগ করে নেওয়া মেমরি বিভাগে প্রচুর প্রক্রিয়া সংযুক্ত থাকে তবে জাল অঙ্কের দিকে নিয়ে যেতে পারে। top, psএবং অনুরূপ প্রোগ্রামগুলি একইভাবে এর দ্বারা প্রভাবিত হয়।
পিটার আইসেন্ট্রাট

আমি জানি যে কীভাবে ভাগ করা মেমরি কাজ করে, তবে এটি প্রদর্শিত হয় যে পিএস সেই তথ্য সরবরাহ করতে পারে না (বা আমি আমার পিএস ডকুমেন্টেশনে এটি খুঁজে পাইনি, অন্তত)। শীর্ষ বা htop আসলে প্রতি প্রক্রিয়া ভিত্তিতে ভাগ করা মেমরির ব্যবহার দেখাতে পারে।
জাস্টিন স্মিথ

9

@ ব্যবহারকারী 26528 এর উত্তর সঠিকভাবে মেমরির গণনা করে না - আপনার কেবল শীর্ষের নয়, এসএমএসে ম্যাপিংয়ের যোগফল প্রয়োজন। এই স্ক্রিপ্টটি এটি করা উচিত:

#!/bin/bash

for pid in $(ps -ef | awk '{print $2}'); do
    if [ -f /proc/$pid/smaps ]; then
        echo "* Mem usage for PID $pid"     
        rss=$(awk 'BEGIN {i=0} /^Rss/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pss=$(awk 'BEGIN {i=0} /^Pss/ {i = i + $2 + 0.5} END {print i}' /proc/$pid/smaps)
        sc=$(awk 'BEGIN {i=0} /^Shared_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)            
        sd=$(awk 'BEGIN {i=0} /^Shared_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pc=$(awk 'BEGIN {i=0} /^Private_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pd=$(awk 'BEGIN {i=0} /^Private_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        echo "-- Rss: $rss kB" 
        echo "-- Pss: $pss kB"
        echo "Shared Clean $sc kB"
        echo "Shared Dirty $sd kB"
        echo "Private $(($pd + $pc)) kB"
    fi
done

আউটপুটস: লাইন 16: +: সিনট্যাক্স ত্রুটি: অপারেন্ড প্রত্যাশিত (ত্রুটি টোকেন "+") যা এতে রয়েছে এমন লাইনটি: প্রতিধ্বনি "প্রাইভেট $ (($ পিডি + $ পিসি)) কেবি", আমি সেন্টোস 7 এ চলেছি ।
বেসিল একজন

2
@ ইভস্মিথ কেন পিএসএসে 0.5 যোগ করবেন?
পিট

1
10,000 ছোট ছোট Awk স্ক্রিপ্টগুলি চালানো একটি বিশাল অ্যান্টিপ্যাটার্ন, আপনার কেবলমাত্র এই সমস্তগুলি একটি একক অ্যাও স্ক্রিপ্টে রিফ্যাক্টর করা উচিত।
ট্রিপলি

তবে এই স্ক্রিপ্টটি নিজেই খুব বেশি স্মৃতি
গ্রহন করে

8

মেমরির ব্যবহার দ্বারা প্রক্রিয়াগুলি তালিকাভুক্ত করুন

PS -e -orss =, আরগস = | সাজান-বি-কে 1,1 এন


ps -e -orss=,pid=,args= | sort -b -k1,1nপ্রক্রিয়া আইডি অন্তর্ভুক্ত করতে ব্যবহার করুন
জ্যাকব

psনিজের অনুসারে বাছাই করতে পারেন:ps -eo rss=,args= --sort +rss
ফিল্ড 294


3

মেমো ব্যবহারের মাধ্যমে প্রক্রিয়াগুলি তালিকাভুক্ত করুন

কমান্ড: ps -e -orss =, আরগস = | সাজানো-বি-কে 1,1 এন | PR -TW $ কলম্বস \


3

হালনাগাদ:

নিম্নলিখিত এক-লাইনার বর্তমান ব্যবহারকারীর দ্বারা মোট মেমরির খরচ সম্পর্কে তথ্য সরবরাহ করে।

echo "------------------------------------" && mem=0 && while read -r rss comm ; do mbs=$((rss/1024)); mem=$((mbs + mem)); echo $mbs"MB - $comm"; done <<< "$(ps -u $USER -wo rss=,comm= --sort -rss)" && echo "------------------------------------" && echo $mem"MB: Memory used by user '$USER'"

আমি এমবিতে সর্বাধিক মেমরির ব্যবহার অনুসারে বাছাই করা সমস্ত ব্যবহারকারীর প্রক্রিয়াগুলি তালিকাভুক্ত করেছি:

ps -u $USER -wo rss=,comm= --sort -rss | while read -r rss comm ; do echo $((rss/1024))"MB -" $comm; done

সম্পূর্ণ পাথ প্রক্রিয়াটি দেখানোর command=পরিবর্তে আপনি ব্যবহার করতে পারেন comm=

=শুধু কলাম শিরোনাম সরিয়ে ফেলা হয়।


3

আমি দেখতে পেয়েছি যে বহুবার একই প্রক্রিয়াটিতে কাঁটাচামচ প্রক্রিয়া রয়েছে এবং আপনি প্রক্রিয়াটি দ্বারা ব্যবহৃত মোট স্মৃতিতে আগ্রহী। যেমন গুগল ক্রোম একাধিক প্রক্রিয়া শুরু করে এবং আপনি ক্রোমের দ্বারা নেওয়া মোট স্মৃতি জানতে চান memory আমি এক লাইনের কমান্ডের নীচে খুব দরকারী

echo "%CPU   %MEM    MEM     PROCESS"
ps aux | awk '{mem[$11]+=int($6/1024)}; {cpuper[$11]+=$3};{memper[$11]+=$4}; END {for (i in mem) {print cpuper[i]"% ",memper[i]"% ",mem[i]" MB ",i}}' | sort -k3nr | head -n 5

এটি এমবিতে মেমরি প্রদর্শন করা, মেমরি অনুসারে বাছাই করা এবং প্রধানত কমান্ড অনুসারে গোষ্ঠীকরণের মতো প্রচুর বিষয়ের যত্ন নেয়। এটি% সিপিইউ এবং% মেমরির গ্রুপিং করছে। এটি ব্যবহারকারীর বান্ধব বিন্যাসে ডেটা দেখাচ্ছে showing

এই আদেশটি এই উত্তরটি থেকে অনুপ্রাণিত হয়েছিল এবং কোন প্রক্রিয়াটি আমার সংস্থান গ্রহণ করছে তা সম্পর্কে ধারণা পেতে এটি আমাকে অনেক সহায়তা করেছিল।

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