İşlemleri bellek kullanımına göre sıralama


128

Tüm işlemlerin listesini ve hafızayı görebiliyorum

ps aux 

ve VSZ ve RSS’den geçerek

Bu komutun çıktısını RSS değerindeki azalan sıraya göre sıralamanın bir yolu var mı?


Beklenen çıktı ne olurdu? kontrolps
Rahul Patil

Nasıl kullanılacağına --sortilişkin ek örnekler burada: alvinalexander.com/linux/…
slm

1
Herhangi bir aracı kullanarak
süperset sorusu

Yanıtlar:


224

Aşağıdaki komutu kullanın:

ps aux --sort -rss

Daha fazla Linux işlem belleği kullanımı için burayı kontrol edin


12
not - en iyi sonuçları görmek istiyorsanız, istediğiniz headgibi ps aux --sort -rss | head -n15
yayınlamak

3
Hata alıyorum ps: illegal option -- -
Miguel Mota

@MiguelMota Bu neye eğer: ps aux --sort=rss?
coffeMug

2
@coffeMug işe yaramadı ama bu yaptıps aux | sort -rn -k 6
Miguel Mota

1
@coffeMug sürümü nasıl bulacağından emin değilim ama ben Mac OSX'tayım, bu yüzden belki de bu yüzden
Miguel Mota

24

Hızlı ve kirli bir yöntem, komutun çıktısını yalnızca boruya ps auxbağlamaktır sort:

$ ps aux | sort -rn -k 5,6

Örnek

$ ps aux | sort -rn -k 5,6
...
root      1584  0.0  0.0  22540  1236 ?        S    07:04   0:01 hald-addon-storage: polling /dev/sr0 (every 2 sec)
root      1575  0.0  0.0  22536   872 ?        S    07:04   0:00 /usr/libexec/hald-addon-generic-backlight
root      1574  0.0  0.0  22536   880 ?        S    07:04   0:00 /usr/libexec/hald-addon-leds
root      1565  0.0  0.0  22536   876 ?        S    07:04   0:00 /usr/libexec/hald-addon-rfkill-killswitch
saml      2507  0.0  0.0  22232   500 ?        S    07:05   0:00 dbus-launch --sh-syntax --exit-with-session
root      1671  0.0  0.0  22156   936 ?        Ss   07:04   0:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
...

Bu, çıktıya karışan sütun başlıkları için uygun değildir, ancak komut satırında hatırlamak kolaydır ve bu tür bir çıktıyı manüel olarak görüntülerken istediğiniz şeyi yapmanın kabul edilebilir bir yoludur.

Örnek

root      1791  0.0  0.0   4140   536 tty2     Ss+  07:04   0:00 /sbin/mingetty /dev/tty2
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       996  0.0  0.0      0     0 ?        S    07:04   0:01 [kdmflush]
root       982  0.0  0.0      0     0 ?        S    07:04   0:00 [kvm-irqfd-clean]

Daha fazla ipucu

Ek bir ipucu, çıktının tamamını gibi başka bir komuta göndermek olacaktır less. Bu, bilgilere her seferinde bir sayfaya bakmanıza ve ayrıca çıkışta ileri geri gitmek için ok tuşlarını ve sayfa yukarı / aşağı tuşlarını kullanmanıza olanak tanır.

$ ps aux | sort -rn -k 5,6 | less

Çıktınız çok sarılıyorsa -Sdüğmeyi daha az kullanabilirsiniz, bu da tüm çıktının tek bir satırda kalmasını sağlar. Ok tuşlarını kullanarak hepsini görmek için sola / sağa / yukarı / aşağı hareket ettirebilirsiniz.

$ ps aux | sort -rn -k 5,6 | less -S

Ps içinde sıralama

Bazı sürümleri pskullanma yeteneği sağlar --sort. Bu anahtar daha sonra sıralama düzenini belirtmek için a +veya a ile eklenmiş anahtarları alabilir -... en küçükten en büyüğe veya en büyükten en küçüğe.

Örnekler

vsz, -rss

$ ps aux --sort=vsz,-rss | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S    07:03   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    07:03   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    07:03   0:01 [migration/0]
root         5  0.0  0.0      0     0 ?        S    07:03   0:00 [watchdog/0]

+ Vsz + RSS

$ ps aux --sort=+vsz,+rss | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S    07:03   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    07:03   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    07:03   0:01 [migration/0]
root         5  0.0  0.0      0     0 ?        S    07:03   0:00 [watchdog/0]

-vsz, -rss

$ ps aux --sort=-vsz,-rss | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1832  0.0  0.0 2088924 3312 ?        Sl   07:04   0:00 /usr/sbin/console-kit-daemon --no-daemon
saml      3517  0.2  1.2 2073196 100492 ?      Sl   07:06   0:34 /home/saml/.dropbox-dist/dropbox
saml      3516  0.0  0.8 2071032 67388 ?       Sl   07:06   0:07 /home/saml/.dropbox-dist/dropbox
saml      2657  0.1  0.7 1580936 57788 ?       Sl   07:05   0:27 nautilus

olacak ps hep beklediğiniz şekilde çıkış sütunları sortgörmek / süreç onları?
Felipe Alvarez,

Ps hangi sürümlerine bağlı
slm

2
Y ... | less, iyi bir tavsiyedir, ancak bazen işleminiz çok büyük bir komut satırına sahiptir ve çıktıları tutar. Bu gibi durumlarda ... | less -Sdaha iyi çalışır.
Atık

@ waste - iyi bir ipucu, sadece şunu kısalttığınızı unutmayın, -Sböylece görmek istediklerinizin bir kısmını kaybedebilirsiniz, ancak yalnızca en çok kalan sütunları ilgileniyorsanız iyi bir tavsiye.
slm

@slm Bunun için böyle olduğundan emin değilim less -S. lessGörünümü kapattığınızda her şey kaybolur, ancak görünümdeyken, dikey olarak da yatay olarak kaydırma yapabilirsiniz. Yine de kopyalama zor olabilir.
Atık

6

Ps, kullanılan gerçek belleği yansıtmasa bile, bu komut oldukça faydalıdır.

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 "" }'

3

ps aux --sort - rss güzeldir:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user     5984  0.8  7.4 1632488 296056 ?      Sl   06:30   6:18 /usr/lib/chromium-browser/chromium-browser --type=ren
user    23934 21.7  6.0 1565600 241228 ?      Sl   15:45  40:10 /opt/atom/atom --type=renderer --enable-experimental-
user     5533  0.9  5.1 3154096 206376 ?      SLl  06:30   6:47 /usr/lib/chromium-browser/chromium-browser --enable-p
user    17306  1.7  4.9 1360648 196124 ?      Sl   18:14   0:36 /usr/lib/chromium-browser/chromium-browser --type=ren
user    22272 30.1  4.6 1347784 185032 ?      Sl   18:43   1:54 /usr/lib/chromium-browser/chromium-browser --type=ren
user    19318  0.6  3.3 1304324 133452 ?      Sl   18:27   0:09 /usr/lib/chromium-browser/chromium-browser --type=ren
user    22098  1.0  3.3 1298500 133216 ?      Sl   18:43   0:04 /usr/lib/chromium-browser/chromium-browser --type=ren

ancak uygulamaya göre bellek ve cpu kullanımlarını görmek istiyorsanız (komutlar ile gruplandırılmış):

python3.6  sum_process_resources.py 
====   CPU%   ====
0. /opt/atom/atom | 27.8
1. /usr/lib/chromium-browser/chromium-browser | 11.2
2. python3.6 | 11.0
3. /opt/google/chrome/chrome | 1.6
4. /usr/lib/xorg/Xorg | 1.4
5. /opt/Franz/franz | 0.7
====   MEM%   ====
0. /usr/lib/chromium-browser/chromium-browser | 37.2
1. /opt/google/chrome/chrome | 11.3
2. /opt/Franz/franz | 10.6
3. /opt/atom/atom | 10.1
4. /usr/lib/xorg/Xorg | 2.0
5. com.google.android.gms.persistent | 1.4
====   RSS MB   ====
0. /usr/lib/chromium-browser/chromium-browser | 1475.07 MB
1. /opt/google/chrome/chrome | 461.35 MB
2. /opt/Franz/franz | 429.04 MB
3. /opt/atom/atom | 402.18 MB
4. /usr/lib/xorg/Xorg | 78.53 MB
5. com.google.android.gms.persistent | 58.02 MB

kod:

#sum_process_resources.py
from collections import OrderedDict
import subprocess

def run_cmd(cmd_string):
    """Runs commands and saves output to variable"""
    cmd_list = cmd_string.split(" ")
    popen_obj = subprocess.Popen(cmd_list, stdout=subprocess.PIPE)
    output = popen_obj.stdout.read()
    output = output.decode("utf8")
    return output

def sum_process_resources():
    """Sums top X cpu and memory usages grouped by processes"""
    ps_memory, ps_cpu, ps_rss = {}, {}, {}
    top = 6
    output = run_cmd('ps aux').split("\n")
    for i, line in enumerate(output):
        cleaned_list = " ".join(line.split())
        line_list = cleaned_list.split(" ")
        if i > 0 and len(line_list) > 10:
            cpu = float(line_list[2])
            memory = float(line_list[3])
            rss = float(line_list[5])
            command = line_list[10]
            ps_cpu[command] = round(ps_cpu.get(command, 0) + cpu, 2)
            ps_memory[command] = round(ps_memory.get(command, 0) + memory, 2)
            ps_rss[command] = round(ps_rss.get(command, 0) + rss, 2)
    sorted_cpu = OrderedDict(sorted(ps_cpu.items(), key=lambda x: x[1], reverse=True))
    sorted_memory = OrderedDict(sorted(ps_memory.items(), key=lambda x: x[1], reverse=True))
    sorted_rss = OrderedDict(sorted(ps_rss.items(), key=lambda x: x[1], reverse=True))
    print("====   CPU%   ====")
    for i, k in enumerate(sorted_cpu.items()):
        if i < top:
            print("{}. {} | {}".format(i, k[0], k[1]))
    print("====   MEM%   ====")
    for i, k in enumerate(sorted_memory.items()):
        if i < top:
            print("{}. {} | {}".format(i, k[0], k[1]))
    print("====   RSS MB   ====")
    for i, k in enumerate(sorted_rss.items()):
        if i < top:
            print("{}. {} | {} MB".format(i, k[0], round((k[1]/1024), 2)))


if __name__ == '__main__':
    sum_process_resources()

1

Diğer cevaplarda gösterilen BSD tarzı argümanlara bir alternatif olarak, biri kullanılabilir (en azından Debian ve Ubuntu tarafından gönderilen procps kullanarak):

ps -eF --sort=-rss

1

basit yolu htop yüklemek

İşlemi PID, Yüzde CPU, MEM değerlerine göre sıralayabilirsiniz.

daha sofistike


0
  1. Çalıştır topkomutu
  2. Shift + F alana göre sıralamak için (aşağıdaki tam menüye bakınız)
  3. nBellek kullanımına göre sıralamak için seçin

n:% MEM = Bellek kullanımı (RES)


0

Kullanılan bellek, işlem adına göre nasıl toplanır:

Bazen en büyük tek işlemlere bile bakıldığında hâlâ bilinmeyen çok fazla kullanılmış bellek var. Belleği kullanarak aynı küçük işlemlerin çoğunun olup olmadığını kontrol etmek için, aynı isimdeki işlemlerin kullandığı toplam hafızayı toplamak için awk kullanan aşağıdaki gibi bir komut kullanabilirsiniz:

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

örneğin çıktı

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.