Merhabalar
Bazen çok fazla CPU kullanan bir uygulamamız olur ve gereğinden fazla CPU kullanarak sistemin yavaş çalışmasına diğer uygulara kötü yönde sebebiyet verebilir. Bu yazıda CPULimit adlı aracın kullanımına ve detaylarına değineceğim. CPULimit aracı bir uygulamanın (process) CPU kullanımını sınırlamak için kullanılmaktadır. Örneğin, %90 CPU tüketen bir process ‘e %50 CPU sınırlaması yapabiliyorsunuz ve artık o CPU kullanımında kalıyor taki siz uygulamayı (process) kapatana kadar.
Neden Kullanmalıyım?
Pek söylenecek birşey yok, fakat çok iyi bir bilgisayarınız yoksa bazı programlar sizin CPU kullanmanızı sizin isteminiz dışında sistemi şişirirler ve bu sizin diğer programlarınızı kullanmanızı kötü yolda etkiler. İşte bu yüzden bu aracı kullanabilirsiniz. Bunun gibi sebepler olabilir. 🙂
CPULimit Aracının Kurulumu
Ubuntu/Linux ve Debian için;
root# apt-get update
root# apt-get install -y cpulimit
CentOS/Rhel ve Fedora için;
root# yum update
root# yum install -y cpulimit
CPULimit Kaynak Koddan Kurulum
Aracı paket yöneticisiyle değilde kaynak koddan kurmak isterseniz aşağıdaki adımları takip edebilirsiniz.
root# wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
root# unzip cpulimit.zip
root# cd cpulimit-master
root# make
root# cp src/cpulimit /usr/bin
CPUlimit Syntax Çıktısı
Usage: cpulimit TARGET [OPTIONS...] TARGET must be exactly one of these: -p, --pid=N pid of the process -e, --exe=FILE name of the executable program file -P, --path=PATH absolute path name of the executable program file OPTIONS -b --background run in background -l, --limit=N percentage of cpu allowed from 0 to 100 (mandatory) -v, --verbose show control statistics -z, --lazy exit if there is no suitable target process, or if it dies -h, --help display this help and exit
Yüksek CPU Tüketen Süreç Oluşturmak
Aşağıdaki komutu kullanarak gereğinden fazla yüksek CPU tüketen bir process oluşturacağız ve arka planda çalışmasını sağlayacağız. NOT: Aşağıdaki komutu problem çıkmaması için sanal bir linux sistemde kullanabilirsiniz.
root# md5sum /dev/zero &
[1] 4280
ardından top komutunu kullanarak arka planda anlık çalışan süreçleri görebiliriz. Gördüğünüz gibi ilk sırada bizim çalıştırdığımız süreç yer almaktadır.
root# top
top - 06:19:42 up 53 min, 3 users, load average: 0.22, 0.06, 0.06
Tasks: 240 total, 2 running, 238 sleeping, 0 stopped, 0 zombie
%Cpu(s): 50.0 us, 50.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2112260 total, 1599948 used, 512312 free, 79288 buffers
KiB Swap: 1046524 total, 0 used, 1046524 free. 747996 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4280 root 20 0 11412 688 608 R 90,4 0.0 0:16.32 md5sum
1 root 20 0 33916 4416 2640 S 0.0 0.2 0:01.97 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.15 ksoftirqd/0
Arka planda çalışan yüksek CPU tüketen md5sum adlı süreci geri konsol ekranına çağırmak isterseniz aşağıdaki komut kullanılabilir. İsterseniz CTRL+C kombinasyonuna basarak süreci öldürebilirsiniz.
root# fg
md5sum /dev/zero
^C
CPUlimit ile CPU Kullanımını Sınırlamak
Biz önceden yüksek CPU tüketen bir process oluşturmuştuk. Bu sürecin PID numarasını öğrenip ardından cpulimit aracını kullanarak %90 ‘da çalışan süreci %50 kullanımına sınırlayacağız. Süreç bizim verdiğimiz değerin üzerine çıkmayacaktır. !
Arka planda çalışan sürecin PID numarasını aşağıdaki komutu kullanarak öğrenebiliriz.
root# pidof md5sum
4280
Şimdi öğrendiğimiz ve yüksek CPU tüketen sürecin PID numarasına CPU sınırlaması yapacağız. Aşağıdaki komutu kullanarak %50 CPU sınırlaması yapabiliriz.
-b : Arka plana atar.
-l : Limit parametresi.
-p : PID belirtmek için.
root# cpulimit -l 50 -p 4280 -b
Test için tekrardan top komutunu kullanarak md5sum adlı sürecin CPU kullanımına bakabiliriz.
root# top
top - 06:19:42 up 53 min, 3 users, load average: 0.22, 0.06, 0.06
Tasks: 240 total, 2 running, 238 sleeping, 0 stopped, 0 zombie
%Cpu(s): 50.0 us, 50.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2112260 total, 1599948 used, 512312 free, 79288 buffers
KiB Swap: 1046524 total, 0 used, 1046524 free. 747996 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4280 root 20 0 11412 688 608 R 49,4 0.0 0:16.32 md5sum
1 root 20 0 33916 4416 2640 S 0.0 0.2 0:01.97 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.15 ksoftirqd/0
Eğer CPU sınırlaması yaptığınız bir süreci öldürmek isterseniz ( pidof md5sum ) PID numarasını öğrendikten sonra aşağıdaki komutu kullanabilirsiniz. Eğer süreç ölmezse ikinci komutu kullanabilirsiniz.
root# pidof md5sum
=> 4280
root# kill 4280
root# kill 4280 -9
veya cpulimit aracına ait bir öldürme tekniği var, aynı zamanda onuda kullanabilirsiniz. Fakat benim tavsiyem kill komutunu kullanmanız çünkü kill komutu daha iyidir ve pratikdir. CPULimit aracının öldürme kabiliyeti çok düşük ( ben beğenmedim açıkcası).
root# cpulimit -l 50 -k -e 4280
Process 4280 detected
Process 4280 dead!
Eğer CPU kullanımını limitlemek istediğiniz bir çalıştırılabilir program ise aşağıdaki gibi bir komut kullanabilirsiniz. Burada ise firefox adlı çalıştırılabilir programın CPU kullanımı %50 sınırlanmıştır.
root# cpulimit -e firefox -l 50
Kaynak : https://github.com/opsengine/cpulimit/ && http://cpulimit.sourceforge.net/
Daha fazla bilgi için man sayfasına bakabilirsiniz.
Sevgiler.
Leave a Reply