লিনাক্সে ব্যবহারকারীর জন্য মেমরির ব্যবহার?


20

ধরা যাক আমার লিনাক্স বাক্সে আমার 20 জন ব্যবহারকারী লগইন করেছেন। আমি কীভাবে জানতে পারি যে তাদের প্রত্যেকে কতটা স্মৃতি ব্যবহার করছে?

উত্তর:


19

আপনি গন্ধ ব্যবহার করার চেষ্টা করতে পারেন ( ELC2009 দেখুন: আরও তথ্যের জন্য দুর্গন্ধযুক্ত স্মৃতি ব্যবহার ভিজ্যুয়ালাইজিং )। বিশেষত, sudo smem -uআপনার যে তথ্যটি চান তা আপনাকে দেওয়া উচিত।


1
আমি সম্মতি জানাই এটি সম্ভবত এটির সেরা উপায়। তবে, গন্ধের জন্য একটি সত্যিকারের আধুনিক কার্নেল দরকার যা প্রতিষ্ঠিত এন্টারপ্রাইজগুলির কোনওটিই সরবরাহ করে না। সুতরাং আপনি যদি ফেডোরা, ওপেনসুএস বা একটি নন-এলটিএস উবুন্টুর মতো কোনও সম্প্রদায় চালাচ্ছেন না, তবে আপনার ভাগ্য নেই।
wzzrd

এটা অসাধারণ. অনেক ধন্যবাদ. আমি গন্ধ সম্পর্কে জানতাম না। দেখে মনে হচ্ছে এটি কাজ করবে।
জাকুব ট্রসজোক

4
এফওয়াইআই, গন্ধের জন্য একটি কার্নেল প্রয়োজন> = 2.6.27
xebeche

গন্ধের জন্য এখানেও জিটিকের মতো গুচ্ছ উপাদান প্রয়োজন, বিকল্প নয়।
অ্যারাক্যাট

@ আনারকাট: সত্য নয় (কমপক্ষে দেবিয়ান জেসির পক্ষে)। একমাত্র নির্ভরতা হল অজগর, পাইথন-ম্যাটপ্ল্লোলিব কেবলমাত্র একটি প্রস্তাবিত প্যাকেজ যা আপনি এড়িয়ে যেতে পারেন --no-install-recommends
লায়ো লাম

9

ভাগ করা মেমরি সমস্যাগুলি উপেক্ষা করে, এখানে একটি দ্রুত স্ক্রিপ্ট যা আপনাকে লগইন হওয়া সমস্ত ব্যবহারকারীদের জন্য, ভিএমএম অনুসারে বাছাই করা এবং সুন্দর কলামগুলিতে সংগঠিত করার জন্য আরএসএস এবং ভিএমইএম দেয়:

(echo "user rss(KiB) vmem(KiB)";
 for user in $(users | tr ' ' '\n' | sort -u); do
   echo $user $(ps -U $user --no-headers -o rss,vsz \
     | awk '{rss+=$1; vmem+=$2} END{print rss" "vmem}')
 done | sort -k3
) | column -t

ভাল, দুঃখের সাথে 'ভাগ করা মেমরি সমস্যাগুলি উপেক্ষা' এই স্ক্রিপ্টটি সম্পূর্ণ জাল ফেলেছে।
fgysin মনিকা

বাজে? বোগাস কি? ঠিক কিভাবে আউটপুট বোগাস?
আনারকেট

o / p আরএসএস এবং ভিএমএমে রয়েছে, আরএসএস এবং ভিএমএম কী?
vidur punj

5

আরএসএসের যোগফল পেতে আমি নিম্নলিখিত কাজগুলি মনে করি। এটি ব্যবহারকারীদের kbrandt এবং মূলের জন্য আরএসএসের যোগফল পাবে।

ps -U kbrandt,root --no-headers  -o rss | (tr '\n' +; echo 0) | bc

আমার যুক্ত হওয়া উচিত যে আমি সংখ্যার অংশের অ্যাড কলামটি চুরি করেছি: পিক্সেলবিট.আর.সি.এম.ডি.এল.এইচটিএমএল
কাইল ব্র্যান্ড্ট

3

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


আমি মনে করি আপনার ডান পিএস এর উত্তর, তবে আপনাকে সম্ভবত ভাগ করা স্মৃতি উপেক্ষা করতে হবে।
জেসন ট্যান

গন্ধ (আমার উত্তরে উল্লিখিত) তার পিএসএস এবং ইউএসএস পরিমাপের সাথে ভাগ করা মেমরির সমস্যার সমাধান করে (পিএসএস আনুপাতিকভাবে ভাগ করে নেওয়া প্রক্রিয়াগুলির মধ্যে ভাগ করে নেওয়া মেমরিটি বিতরণ করে)।
সিজারব

2

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


2

আপনি কিছু চেষ্টা করতে পারেন:

PS auxU ম্যাক্সওয়েল | awk '{মেমরি + = $ 4}; শেষ {মুদ্রণ মেমরি} '


ধন্যবাদ! বর্তমান ব্যবহারকারীর জন্য এটি করা যেতে পারে যেমন পিএস-ও ব্যবহারকারী, আরএসএস - কোনও-শিরোনাম | awk '} মেমি + = $ 2}; শেষ। মুদ্রণ
স্মৃতি

আমি এটিকে সামান্য হিসাবে সম্পাদনা করেছি ps aux | grep mysql | awk '{memory +=$4}; END {print memory }', যেখানে মাইএসকিএল ব্যবহারকারীর নাম বা প্রক্রিয়াটির নামের সাথে প্রতিস্থাপন করা যেতে পারে।
jeshurun

2

একই জন্য সন্ধান, আমি এটি বুঝতে পেরেছি

ps aux | awk '{arr[$1]+=$4}; END {for (i in arr) {print i,arr[i]}}' | sort -k2

ব্যবহারকারীর দ্বারা গোষ্ঠীভুক্ত মেম দ্বারা আদেশযুক্ত প্রসেসগুলি মুদ্রণ করতে (কলাম 1, $ 1), আপনি things 1 এবং $ 4 পরিবর্তন করে অন্য জিনিসগুলির দ্বারা গ্রুপ করতে পারেন এবং অন্যান্য জিনিসগুলি যোগ করতে পারেন

  • $ 1 হল প্রথম কলাম: ব্যবহারকারীর নাম (এর দ্বারা গোষ্ঠীগুলি)
  • $ 4 হল চতুর্থ কলাম:% মেম (এটি যোগ করে)

সমাধানটি পেয়ে আমি খুশি হয়েছিলাম, কেবল ভাগ করে নিতে চেয়েছিলাম।


1
ধন্যবাদ! আমি কয়েক পরিবর্তন করেছি এবং এটির ব্যবহার করছি: ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]}}' | sort -nk2। সাজানোর কমান্ডের -nপতাকাটির প্রয়োজন এটি একটি সংখ্যা হিসাবে মেমরিটিকে পার্স করতে। এছাড়াও এইভাবে আপনি পরিবর্তে অ্যাপ্লিকেশন নামের দ্বারা "ব্যবহারকারীর" শব্দটি "কমান্ড" দিয়ে গ্রুপে বদলে নিতে পারেন।
টিম

অজক থেকে শেষ কলামটি পাওয়ার জন্য উপরের আমার মন্তব্যে $ 2 এর পরিবর্তে $ এনএফ হওয়া উচিত (যেমন $ 2 এর মধ্যে ফাঁকা স্থান রয়েছে এমন কমান্ডগুলির সাথে কাজ করে না)। দেখে মনে হচ্ছে আমি আর কোনও মন্তব্য সম্পাদনা করতে পারছি না।
টিম

2

এই বাশ স্ক্রিপ্টটি সম্ভবত জাহান্নামের মতোই কুৎসিত, তবে মহড়ার জন্য আপনাকে ধন্যবাদ, আমার বাশটি মরিচা হয়ে উঠছিল!

#!/bin/sh
OLDIFS=$IFS
IFS=$'\n'
tempsum=0
totalmem=0
for m in `ps -eo user,rss --sort user | sed -e 's/  */ /g' | awk -F'[ ]' {'print $0'}`; do
  nu=`echo $m|cut -d" " -f1`
  nm=`echo $m|cut -d" " -f2`
  # echo "$nu $nm $nu"
  if [ "$nu" != "$ou" ] && [ $(echo "$nm"|grep -E "^[0-9]+$") ] 
  then 
    if [ "$tempsum" -ne 0 ]; then echo "Printing total mem for $ou: $tempsum"; fi
    ou=$nu
    tempsum=$nm
    let "totalmem += $nm"
  else 
    let "tempsum += $nm" 
    let "totalmem += $nm"
  fi
done
echo "Total Memory in Use: $totalmem/$(free | grep Mem: | awk '{print $2}')"
IFS=$OLDIFS

ফলাফল:

[20:34][root@server2:~]$ ./memorybyuser.sh 
Printing total mem for admin: 1387288
Printing total mem for apache: 227792
Printing total mem for avahi: 1788
Printing total mem for dbus: 980
Printing total mem for 68: 3892
Printing total mem for root: 55880
Printing total mem for rpc: 292
Printing total mem for rpcuser: 740
Printing total mem for smmsp: 720
Printing total mem for xfs: 680
Total Memory in Use: 1682360/4152144

দয়া করে মন্তব্য / সঠিক করুন এবং আমি উত্তর আপডেট করব। এছাড়াও আমি পিএস থেকে আরএসএস মেমরি আউটপুট ব্যবহার করি, কারণ অন্যরা আলোচনা করেছেন যে এই মানটি ব্যবহার করার পক্ষে বিভিন্ন দিকনির্দেশনা রয়েছে।


এটিতে একটি ছোট সমস্যা রয়েছে - এটি পিএস আউটপুটে সর্বশেষ ব্যবহারকারীর জন্য "মুদ্রণ টোটাল মেম $ $: $ টেমসাম" মুদ্রণ করবে না। লুপটি কেবলমাত্র কোনও ব্যবহারকারী দ্বারা ব্যবহৃত পরিমাণে শেষ প্রোগ্রামটি যুক্ত করবে এবং তারপরে এটি বন্ধ হয়ে যাবে।
জাকুব ট্রসজোক

কি দারুন. আপনার স্ক্রিপ্টটি হেল্পফুলের চেয়ে বেশি ছিল !!!! আপনি কল্পনা করতে পারবেন না! খুব বেশি না হলেও কি আমি কিছু জিজ্ঞাসা করতে পারি? আপনি কি এটি সম্পূর্ণ সিপু ব্যবহার দেখাতে পারবেন? এবং সম্ভবত এটি মেমরির ব্যবহার যদি 100 মিম্বরের বেশি হয় তবে এটি প্রদর্শন করা যায়?

1

আমার সিস্টেমে গন্ধ পাওয়া যায় নি, এবং ডেভের স্ক্রিপ্ট কোনও কারণে কার্যকর হয়নি, তাই আমি পিএস আউটপুট প্রক্রিয়া করতে এই কুৎসিত পার্ল অনেলাইনারটি লিখেছি:

ps -eo user,rss | perl -e 'foreach (<>) { m/(\w+)\s+(\d+)/; $mem{$1} += $2; }; foreach $u (keys %mem) { if ($mem{$u}) { print "$u - $mem{$u}\n" }}' | sort

মনে রাখবেন যে কিছু ব্যবহারকারী তাদের ব্যবহারকারী নাম ব্যবহারের পরিবর্তে তাদের ইউআইডি ব্যবহার করে সনাক্ত করা হয়েছিল। Uglier ব্যবহার করে / etc / passwd এর ব্যবহারকারীর নাম পার্স করে আপনি এটিকে মোকাবেলা করতে পারেন:

ps -eo user,rss | perl -e 'open(F, "/etc/passwd"); foreach $l (<F>) { if ($l=~/(.*?):.*?:(\d+)/) { $users{$2}=$1; }}; foreach (<>) { m/(\w+)\s+(\d+)/; $mem{$1} += $2; }; foreach $u (keys (%mem)) { $UN = $u; if ($UN=~/^\d+$/) { $UN = $users{$UN};}; if ($mem{$u}) { print "$UN - $mem{$u}\n" }}' | sort

0

বাশ স্ক্রিপ্ট ব্যবহার করা

#!/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

আউটপুট

User      MemUsage(%)
apache    4.8
dbus      0.0
mysql     3.8
nagios    3.1

0
pmap `pgrep -u 503` | grep total | awk '{print $2}' | awk '{s+=$1}END{print s}'

503 - UID

আপনি /etc/passwdসমস্ত ব্যবহারকারীদের জন্য এটি করতে ইউআইডিগুলি পেতে পারেন


0

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

এটি পড়তে দরকারী ডকটি হ'ল: রেডহ্যাটের রিসোর্স ম্যানেজমেন্ট গাইড ®

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