6.1. Sistem Kaynakları

Sisteminizin başarımını izleyebilmek çok önemlidir. Sistem kaynakları çok azalırsa, birçok soruna neden olabilir. Sistem kaynakları, bireysel kullanıcılar tarafından veya sisteminizin barındırabileceği e-posta veya HTML sayfaları gibi hizmetler tarafından kullanılabilir. Neler olduğunu bilme yeteneği, sistem yükseltmelerinin gerekip gerekmediğini veya bazı hizmetlerin başka bir makineye taşınması gerekip gerekmediğini belirlemeye yardımcı olabilir.

6.1.1. top komutu

Bu komutlardan en yaygın olanı top(1) komutudur. top, sürekli olarak güncellenen sistem kaynakları kullanım raporunu görüntüler.

# top
12:10:49  up 1 day,  3:47,  7 users,  load average: 0.23, 0.19, 0.10
125 processes: 105 sleeping, 2 running, 18 zombie, 0 stopped
CPU states:   5.1% user   1.1% system   0.0% nice   0.0% iowait  93.6% idle
Mem:   512716k av,  506176k used,    6540k free,       0k shrd,   21888k buff
Swap: 1044216k av,  161672k used,  882544k free                  199388k cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
 2330 root      15   0  161M  70M  2132 S     4.9 14.0  1000m   0 X
 2605 weeksa    15   0  8240 6340  3804 S     0.3  1.2   1:12   0 kdeinit
 3413 weeksa    15   0  6668 5324  3216 R     0.3  1.0   0:20   0 kdeinit
18734 root      15   0  1192 1192   868 R     0.3  0.2   0:00   0 top
 1619 root      15   0   776  608   504 S     0.1  0.1   0:53   0 dhclient
    1 root      15   0   480  448   424 S     0.0  0.0   0:03   0 init
    2 root      15   0     0    0     0 SW    0.0  0.0   0:00   0 keventd
    3 root      15   0     0    0     0 SW    0.0  0.0   0:00   0 kapmd
    4 root      35  19     0    0     0 SWN   0.0  0.0   0:00   0 ksoftirqd_CPU0
    9 root      25   0     0    0     0 SW    0.0  0.0   0:00   0 bdflush
    5 root      15   0     0    0     0 SW    0.0  0.0   0:00   0 kswapd
   10 root      15   0     0    0     0 SW    0.0  0.0   0:00   0 kupdated
   11 root      25   0     0    0     0 SW    0.0  0.0   0:00   0 mdrecoveryd
   15 root      15   0     0    0     0 SW    0.0  0.0   0:01   0 kjournald
   81 root      25   0     0    0     0 SW    0.0  0.0   0:00   0 khubd
 1188 root      15   0     0    0     0 SW    0.0  0.0   0:00   0 kjournald
 1675 root      15   0   604  572   520 S     0.0  0.1   0:00   0 syslogd
 1679 root      15   0   428  376   372 S     0.0  0.0   0:00   0 klogd
 1707 rpc       15   0   516  440   436 S     0.0  0.0   0:00   0 portmap
 1776 root      25   0   476  428   424 S     0.0  0.0   0:00   0 apmd
 1813 root      25   0   752  528   524 S     0.0  0.1   0:00   0 sshd
 1828 root      25   0   704  548   544 S     0.0  0.1   0:00   0 xinetd
 1847 ntp       15   0  2396 2396  2160 S     0.0  0.4   0:00   0 ntpd
 1930 root      24   0    76    4     0 S     0.0  0.0   0:00   0 rpc.rquotad

Raporun üst kısmında sistem süresi, çalışma süresi, işlemci (CPU) kullanımı, fiziksel ve takas bellek kullanımı ve süreç sayısı gibi bilgiler listelenir. Aşağıda, işlemci kullanımına göre sıralanmış işlemlerin bir listesi bulunmaktadır.

Çalışırken top çıktısını değiştirebilirsiniz. i'ye basarsanız, top artık boşta olan süreçleri göstermez. Tekrar görmek için tekrar i tuşuna basın. M'ye basmak, bellek kullanımına göre sıralar, S süreçlerin ne kadar süredir çalıştığına göre sıralar ve P tekrar işlemci kullanımına göre sıralar.

Görüntüleme seçeneklerine ek olarak, süreçleri top komutundan da değiştirebilirsiniz. Belirli bir kullanıcının sahip olduğu süreçleri görüntülemek için u'yu, süreçleri sonlandırmak için k'yı ve yeniden önceliklendirmek için r'yi kullanabilirsiniz.

Süreçler hakkında daha ayrıntılı bilgi için /proc dosya sistemine bakabilirsiniz. /proc dosya sisteminde, sayısal adlara sahip bir dizi alt dizin bulacaksınız. Bu dizinler, o anda çalışan işlemlerin süreç kimlikleriyle ilişkilendirilir. Her dizinde, süreç hakkında bilgi içeren bir dizi dosya bulacaksınız.

/proc DİZİNİNDEKİ DOSYALARDA DEĞİŞİKLİK YAPMAMALISINIZ, YAPARSANIZ SİSTEM SORUNLARINA SEBEP OLABİLİR!

6.1.2. iostat komutu

iostat(1), geçerli CPU yük ortalamasını ve disk G/Ç bilgilerini görüntüler. Bu, disk G/Ç kullanımını izlemek için harika bir komuttur.

# iostat
Linux 2.4.20-24.9 (myhost)       12/23/2003

avg-cpu:  %user   %nice    %sys   %idle
          62.09    0.32    2.97   34.62

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dev3-0            2.22        15.20        47.16    1546846    4799520

2.4 çekirdekler için aygıtlar, aygıtın ana ve alt numaralarını kullanan adlardır. Bu durumda listelenen aygıt /dev/hda'dır. iostat'ın verileri daha ayrıntılı göstermesini sağlamak için -x seçeneğini kullanın.

# iostat -x
Linux 2.4.20-24.9 (myhost)       12/23/2003

avg-cpu:  %user   %nice    %sys   %idle
          62.01    0.32    2.97   34.71

Device:  rrqm/s wrqm/s r/s  w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/hdc   0.00   0.00 .00 0.00   0.00   0.00  0.00  0.00     0.00     2.35  0.00  0.00 14.71
/dev/hda   1.13   4.50 .81 1.39  15.18  47.14  7.59 23.57    28.24     1.99 63.76 70.48 15.56
/dev/hda1  1.08   3.98 .73 1.27  14.49  42.05  7.25 21.02    28.22     0.44 21.82  4.97  1.00
/dev/hda2  0.00   0.51 .07 0.12   0.55   5.07  0.27  2.54    30.35     0.97 52.67 61.73  2.99
/dev/hda3  0.05   0.01 .02 0.00   0.14   0.02  0.07  0.01     8.51     0.00 12.55  2.95  0.01

iostat(1) kılavuz sayfası, bu sütunların her birinin ne anlama geldiğine dair ayrıntılı bir açıklama içerir.

6.1.3. ps komutu

ps(1) şu anda çalışan süreçlerin bir listesini sağlayacaktır. Bu komutun size sunduğu çok çeşitli seçenekler vardır.

Yaygın bir kullanım, şu anda çalışan tüm süreçleri listelemek olacaktır. Bunu yapmak için ps -ef komutunu kullanırsınız. (Bu komutun ekran çıktısı eklenemeyecek kadar büyük, aşağıya yalnızca çıktının bir bölümü alınmıştır.)

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Dec22 ?        00:00:03 init
root         2     1  0 Dec22 ?        00:00:00 [keventd]
root         3     1  0 Dec22 ?        00:00:00 [kapmd]
root         4     1  0 Dec22 ?        00:00:00 [ksoftirqd_CPU0]
root         9     1  0 Dec22 ?        00:00:00 [bdflush]
root         5     1  0 Dec22 ?        00:00:00 [kswapd]
root         6     1  0 Dec22 ?        00:00:00 [kscand/DMA]
root         7     1  0 Dec22 ?        00:01:28 [kscand/Normal]
root         8     1  0 Dec22 ?        00:00:00 [kscand/HighMem]
root        10     1  0 Dec22 ?        00:00:00 [kupdated]
root        11     1  0 Dec22 ?        00:00:00 [mdrecoveryd]
root        15     1  0 Dec22 ?        00:00:01 [kjournald]
root        81     1  0 Dec22 ?        00:00:00 [khubd]
root      1188     1  0 Dec22 ?        00:00:00 [kjournald]
root      1675     1  0 Dec22 ?        00:00:00 syslogd -m 0
root      1679     1  0 Dec22 ?        00:00:00 klogd -x
rpc       1707     1  0 Dec22 ?        00:00:00 portmap
root      1813     1  0 Dec22 ?        00:00:00 /usr/sbin/sshd
ntp       1847     1  0 Dec22 ?        00:00:00 ntpd -U ntp
root      1930     1  0 Dec22 ?        00:00:00 rpc.rquotad
root      1934     1  0 Dec22 ?        00:00:00 [nfsd]
root      1942     1  0 Dec22 ?        00:00:00 [lockd]
root      1943     1  0 Dec22 ?        00:00:00 [rpciod]
root      1949     1  0 Dec22 ?        00:00:00 rpc.mountd
root      1961     1  0 Dec22 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root      2057     1  0 Dec22 ?        00:00:00 /usr/bin/spamd -d -c -a
root      2066     1  0 Dec22 ?        00:00:00 gpm -t ps/2 -m /dev/psaux
bin       2076     1  0 Dec22 ?        00:00:00 /usr/sbin/cannaserver -syslog -u bin
root      2087     1  0 Dec22 ?        00:00:00 crond
daemon    2195     1  0 Dec22 ?        00:00:00 /usr/sbin/atd
root      2215     1  0 Dec22 ?        00:00:11 /usr/sbin/rcd
weeksa    3414  3413  0 Dec22 pts/1    00:00:00 /bin/bash
weeksa    4342  3413  0 Dec22 pts/2    00:00:00 /bin/bash
weeksa   19121 18668  0 12:58 pts/2    00:00:00 ps -ef

İlk sütun sürecin sahibini gösterir. İkinci sütun süreç kimliğidir. Üçüncü sütun, üst süreç kimliğidir. Bu, süreci oluşturan veya başlatan süreçtir. Dördüncü sütun işlemci kullanımıdır (yüzde olarak). Beşinci sütun, süreç yeterince uzun süredir çalışıyorsa, başlatma tarihidir. Altıncı sütun, varsa, işlemle ilişkili tty'dir. Yedinci sütun topyekün işlemci kullanımıdır (çalışırken kullanılan toplam işlemci süresi). Sekizinci sütun, komutun kendisidir.

Bu bilgilerle, sisteminizde tam olarak neyin çalıştığını görebilir ve boşta kalmış veya sorunlara neden olan süreçleri sonlandırabilirsiniz.

6.1.4. vmstat komutu

vmstat(1) komutu, sistem süreçleri, bellek, takas, G/Ç ve işlemciler için istatistikleri gösteren bir rapor gösterecektir. Bu istatistikler, komutun en son çalıştırıldığı zamandan itibaren elde edilen veriler kullanılarak oluşturulur. Hiç komut çalıştırılmaması durumunda, sistemin yeniden başlatılmasından itibaren elde edilen veriler kullanılır.

# vmstat -a
procs -----------memory---------------swap-- -----io--- -system-- ------cpu-----
 r  b   swpd    free   inact active si   so    bi    bo   in   cs us sy id wa st
 1  0      0 2328840 3067588 638812  0    0     8     5   66  210  1  0 98  0  0

Aşağıdakiler vmstat(1) kılavuz sayfasından alınmıştır.

ALAN AÇIKLAMALARI
procs (Süreçler)
r: Çalıştırılabilir süreçlerin sayısı (çalışan veya çalışmayı bekleyen).
b: G/Ç işlemlerinin tamamlanmasını bekleyen engellenen süreçlerin sayısı.
memory (Bellek)
Bunlar --unit seçeneğinden etkilenir.
swpd: kullanılan takas belleği miktarı.
free: kullanılmamış bellek miktarı.
buff: tampon olarak kullanılan bellek miktarı.
cache: önbellek olarak kullanılan bellek miktarı.
inact: etkin olmayan bellek miktarı. (-a seçeneği)
active: etkin bellek miktarı. (-a seçeneği)
swap (Takas)
Bunlar --unit seçeneğinden etkilenir.
si: Diskten takas edilen bellek miktarı/saniye.
so: Diske takas edilen bellek miktarı/saniye.
I/O (G/Ç)
bi: Blok aygıtından alınan blok miktarı/saniye.
bo: Blok aygıtına gönderilen blok miktarı/saniye.
system (Sistem)
in: Sistem sayacı dahil, saniyedeki sistem kesmesi sayısı.
cs: Saniyedeki bağlam değiştirme sayısı.
cpu (İşlemci)
Bunlar, toplam işlemci süresinin yüzdeleridir.
us: Çekirdek dışı kod çalıştırmak için harcanan süre. (kullanıcı zamanı, çalışma süresi dahil)
sy: Çekirdek kodunu çalıştırmak için harcanan süre. (Sistem zamanı)
id: Boşta geçirilen süre. Linux 2.5.41'den önce buna G/Ç bekleme süresi dahildir.
wa: G/Ç beklerken geçen süre. Linux 2.5.41'den önce, boşta geçen süre dahildir.
st: Sanal bir makineden çalınan zaman. Linux 2.6.11 öncesi, bilinmiyor.

6.1.5. lsof komutu

lsof(8) komutu, kullanımda olan her dosyanın bir listesini gösterir. Linux her şeyi bir dosya olarak kabul ettiğinden, bu liste çok uzun olabilir. Ancak, bu komut sorunların tanılanmasında yararlı olabilir. Bunun bir örneği, bir dosya sistemini ayırmak istemeniz, ancak size bunun kullanımda olduğunun bildirilmesidir. Kimin kullandığını görmek için dosya sisteminin adı ile bu komutu ve grep(1)'i kullanabilirsiniz.

Veya belirli bir süreç tarafından kullanılan tüm dosyaları görmek istediğinizi varsayarsak lsof -p süreç- kimliği komutunu kullanabilirsiniz.

6.1.6. Daha Fazla Yardımcı Araç Bulmak

Hangi komut satırı araçlarının mevcut olduğu hakkında daha fazla bilgi edinmek için Kıvılcım Hindistan, Linux Kitapçığı adlı bir başvuru kılavuzu yazdı. Hangi araçların olduğunu ve bir dizi görevi nasıl yapacağınızı öğrenmek için iyi bir kaynaktır.