Verilen işlem için cpu sınırı kalıcı olarak nasıl ayarlanır. Cpulimit ve güzel çalışmıyor


12

Birçok benzer soru var ama hiçbiri sorunumda bana yardım etmiyor.

Sunucuda ubuntu 11.10 var (masaüstü sürümü). Üzerinde çalışan bir web sitem var. Çok önemli olan ancak yüksek öncelikli olarak yürütülmesine gerek olmayan bir süreç var. İşlem için cpu kullanımını kalıcı olarak sınırlamak istiyorum , kullanıcı için değil. Bu işlem exec fonksiyonu tarafından çalıştırılır (sistem işlemi değil php fonksiyonudur).

Bu yüzden 2 seçenek görüyorum: 1. Her işlev yürütüldüğünde bir tür sınır ekleyin. 2. Bu işlem için cpu kullanımını kalıcı olarak sınırlayın.

"Güzel" ve cpulimit kullanmaya çalıştım, ama hiçbir şey işe yaramaz gibi görünüyor. Güzel bir etkisi yoktur ve cpulimit (-e ile) der: "hedef süreç bulunamadı".

Ben oldukça acemiyim, bu yüzden neredeyse hiçbir şey bilmediğimi varsayalım.


Bize ne denediğini söyleyebilir misin? cgroups bunu sizin için yapabilir.
Panther

Konfigürasyon ile ilgili olarak, cgsnapshot -skonfigürasyon dosyasını manuel olarak yazmadan bilgi almak için, ikincisi önerilmez.
Mingliang Liu

Süreci gerçekten kısmak mı istiyorsunuz, yani hiçbir zaman belirli bir süreyi aşmadığından emin misiniz?
Ken Sharp

Bu yöntemi kullandım ve benim için çalıştı .. ubuntuforums.org/showthread.php?t=992706
Mustafa Salman

Yanıtlar:


19

İstenen detayların yokluğunda ...

Ubuntu üzerinde nasıl cgroups kullanın.

Bu yazı boyunca, "$ USER" değişkenini işlemi çalıştıran kullanıcıya değiştirmeniz gerekir

Bellek için bilgi ekledim ve bu bir SSS olacak, eğer ihtiyacınız yoksa kullanmayın.

1) yükleyin cgroup-bin

sudo apt-get install cgroup-bin

2) Yeniden başlatın. cgroups artık adresinde/sys/fs/cgroup

3) Kullanıcınız için bir grup oluşturun (sürecin sahibi)

# Change $USER to the system user running your process.
sudo cgcreate -a $USER -g memory,cpu:$USER

4) Kullanıcınız kaynakları yönetebilir. Varsayılan olarak kullanıcılar 1024 cpu birimi (paylaşım) alır, bu nedenle yaklaşık% 10 cpu ile sınırlamak için bellek bayt cinsindendir ...

# About 10 % cpu
echo 100 > /cgroup/cpu/$USER/cpu.shares

# 10 Mb
echo 10000000 > /cgroup/memory/$USER/memory.limit_in_bytes

5) İşleminizi başlatın (exec dosyasını cgexec olarak değiştirin)

# -g specifies the control group to run the process in
# Limit cpu
cgexec -g cpu:$USER command <options> &

# Limit cpu and memory
cgexec -g memory,cpu:$USER command <options> &

Yapılandırma

Grupların sizin için çalıştığını varsayarsak;)

Düzenleyin /etc/cgconfig.conf, özel grubunuza ekleyin

# Graphical
gksudo gedit /etc/cgconfig.conf

# Command line
sudo -e /etc/cgconfig.conf

Grubunuza ekleyin. Yine $ USER öğesini işleme sahip olan kullanıcı adıyla değiştirin.

group $USER {
# Specify which users can admin (set limits) the group
perm {    
    admin {
        uid = $USER;
    }
# Specify which users can add tasks to this group
    task {
        uid = $USER;
    }
}
# Set the cpu and memory limits for this group
cpu {
    cpu.shares = 100;
    }
memory {
    memory.limit_in_bytes = 10000000;
    }
}

Grupları da belirleyebilirsiniz gid=$GROUP, /etc/cgconfig.conf iyi yorumlanmıştır.

Şimdi tekrar işleminizi cgexec -g cpu:$USER command <options>

İşleminizi (PID ile) şurada görebilirsiniz: /sys/fs/cgroup/cpu/$USER/tasks

Misal

bodhi @ ufbt: ~ $ cgexec -g işlemci: bodhi uyku 100 &

[1] 1499

bodhi @ ufbt: ~ $ kedi / sys / fs / cgroup / cpu / bodhi / görevler

1499

Ek bilgi için bkz. Http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/


2
Bölüm 1'i bitirmeyi başardım. Çalışıyor, ancak işlemin yalnızca bazı işlemlerin cpu / belleğe ihtiyacı olduğu zaman sınırlı olduğunu eklemelisiniz. Bu açık değil - ve benim (acemi olduğum gibi) anlaması uzun sürüyor. "Yapılandırma" nın yeniden başlattıktan sonra bile ayarları kaydetmek olduğunu doğru anladım mı?
Rafal

1
Sıralamanıza sevindim. Bir öğrenme eğrisi biraz var =) Evet, yapılandırma, ayarları önyükleme boyunca tutmaktır.
Panther

Komut satırından cgroup kullandığımda iyi çalışıyor. Ama php: (<? Php exec ("cgexec -g cpu: GroupHere NameOfProcess InputFile OutputFile") exec işlevinden aynı komutu yürüttüğümde işe yaramaz. Ben varım ve php den ben o dosyalara uzun yolu kullanın klasörü bir sorun olabilir bir fikrin ne ben her iki durumda da aynı kullanıcı kullanın.?.
Rafal

1
@Rafal: İlk yorumunuz doğru değil, başka işlem çok fazla bellek almıyor olsa bile bellek sınırlandırılmalıdır.
Flimm

1
@Flimm Bu çözümü test ederken yalnızca 2 işlem çalışıyordu - sınırlı olması gereken apache ve işlem. Hiçbir apache bağlantısı kurulmamışsa veya apache'ye yalnızca bir bağlantı olduğunda, bu sınırlı işlem cpu'nun% 100'ünü aldı. Sadece bir kez apache bağlantı birkaç kez sınırlı oldu (Ben bunu web tarayıcısından web sitesi çok tazeleyerek yaptım). Belki de başka bir işlemin çalışmadığı bir durumdu.
Rafal
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.