Cgroups'u kullanarak kaynakları etkin bir şekilde yönetebilir ve web hosting sunucunuzdaki performansı ve güvenilirliği artırabilirsiniz.
Ubuntu'da cgroups'u kullanarak bir örnek yapalım. Bu örnekte, farklı web sitelerinin veya uygulamaların kaynak kullanımını izole etmek için cgroups'u kullanacağız.
cgroup-tools
paketiyle gelir. Eğer yüklü değilse, aşağıdaki komutla kurabilirsiniz:sudo apt update
sudo apt install cgroup-tools
Örneğin, iki farklı web sitesi ("site1.com" ve "site2.com") için cgroups oluşturalım.
sudo cgcreate -g cpu,memory:/web/sites/site1
sudo cgcreate -g cpu,memory:/web/sites/site2
Bu komutlar her bir web sitesi için ayrı bir cgroup oluşturur. cpu
ve memory
controller'ları kullanılarak CPU ve bellek kaynaklarını kontrol etmemize olanak tanır.
sudo cgset -r cpu.cfs_quota_us=$(echo "2 * 100000" | bc) /web/sites/site1
sudo cgset -r cpu.cfs_quota_us=$(echo "2 * 100000" | bc) /web/sites/site2
Bu komutlarla, her iki web sitesi için de CPU kullanımını %20'ye (2/10) sınırlamış oluruz.
Bellek kullanımını sınırlamak için de benzer şekilde memory.limit_in_bytes
parametresini kullanabilirsiniz.
cgclassify
komutunu kullanabilirsiniz.sudo cgclassify -g cpu,memory:/web/sites/site1 $(pidof apache2)
sudo cgclassify -g cpu,memory:/web/sites/site2 $(pidof apache2)
Bu komutlar, apache2
süreçlerini ilgili cgroup'a atar.
Bu şekilde, her bir web sitesi için ayrı cgroups oluşturarak ve kaynak sınırlarını belirleyerek, farklı web siteleri arasında kaynakları izole edebilirsiniz.
basit bir Bash scripti Ubuntu'da cgroups kullanarak farklı web siteleri için cgroups oluşturmak için:
# Web siteleri için cgroup'lar oluşturma fonksiyonu
create_website_cgroup() {
local site_name=$1
local cpu_quota=$2
local memory_limit=$3
# CPU ve bellek controller'larıyla cgroup oluşturma
sudo cgcreate -g cpu,memory:/web/sites/$site_name
# CPU ve bellek sınırlarını belirleme
sudo cgset -r cpu.cfs_quota_us=$(echo "$cpu_quota * 100000" | bc) /web/sites/$site_name
sudo cgset -r memory.limit_in_bytes=$memory_limit /web/sites/$site_name
echo "Cgroup for $site_name created with CPU quota: $cpu_quota and Memory limit: $memory_limit bytes."
}
# Web siteleri için cgroup'lar oluşturma
create_website_cgroup "site1" 0.2 1G # Site 1 için CPU %20 ve 1GB bellek sınırı
create_website_cgroup "site2" 0.3 2G # Site 2 için CPU %30 ve 2GB bellek sınırı
# Apache süreçlerini cgroup'lara atama
sudo cgclassify -g cpu,memory:/web/sites/site1 $(pidof apache2)
sudo cgclassify -g cpu,memory:/web/sites/site2 $(pidof apache2)
Bu script, create_website_cgroup
adında bir fonksiyon tanımlar ve bu fonksiyonu çağırarak her bir web sitesi için ayrı bir cgroup oluşturur. Sonrasında, cgclassify
komutuyla Apache süreçlerini ilgili cgroup'a atar.
Bu scripti çalıştırmadan önce, apache2
yerine kullandığınız web sunucusunun süreç adını (örneğin nginx
, httpd
vb.) kontrol edin ve gerekirse değiştirin. Ayrıca, CPU ve bellek sınırlarını web sitelerinizin ihtiyaçlarına göre ayarlayın.
cgroups kullanarak web siteleri için kaynak sınırlarını güncellemek için basit bir Bash scripti:
# Web sitesi için cgroup'un CPU ve bellek sınırlarını güncelleme fonksiyonu
update_website_limits() {
local site_name=$1
local cpu_quota=$2
local memory_limit=$3
# CPU ve bellek sınırlarını güncelleme
sudo cgset -r cpu.cfs_quota_us=$(echo "$cpu_quota * 100000" | bc) /web/sites/$site_name
sudo cgset -r memory.limit_in_bytes=$memory_limit /web/sites/$site_name
echo "Cgroup for $site_name updated with CPU quota: $cpu_quota and Memory limit: $memory_limit bytes."
}
# Web siteleri için cgroup'lar için sınırları güncelleme
update_website_limits "site1" 0.4 2G # Site 1 için CPU %40 ve 2GB bellek sınırı
update_website_limits "site2" 0.5 3G # Site 2 için CPU %50 ve 3GB bellek sınırı
Bu script, update_website_limits
adında bir fonksiyon tanımlar. Bu fonksiyon, belirli bir web sitesinin cgroup'unda CPU ve bellek sınırlarını günceller. Daha sonra, bu fonksiyonu çağırarak her bir web sitesi için yeni sınırları belirleyebilirsiniz.