Jak ograniczyć całego użytkownika do mniej niż 10% procesora, a nie tylko przetwarzać?

10

Używam centos, cpanel / whm i mam zainstalowaną cpulimit.

Problem, który mam, polega na tym, że jeden z moich użytkowników używa ekstremalnie dużej ilości procesorów. Ponad 100% konsekwentnie i spowalnia mój serwer.

Kolejny problem polega na tym, że są przyjaciółmi i nie są złośliwi, więc nie chcę ich zawieszać.

Kolejną kwestią jest to, że nie mogę ograniczyć tego procesu, ponieważ proces ten zmienia się co sekundę. Za każdym razem jest to inny proces.

Próbowałem następujących, ale to nie działa.

cpulimit -l 10 -e /home/[username]/public_html/theirwebsite.org/index.php

Właśnie wróciłem

No process found
No process found
No process found
No process found
No process found
No process found

itp

Są dwie rzeczy, które wykorzystują to ekstremalne użycie procesora.

Pierwszą rzeczą jest to, że plik w tej lokalizacji, index.php. Inne to [php], cokolwiek to znaczy w WHM. Ale przede wszystkim index.phpjest problem.

Gdybym mógł ograniczyć ten index.phpplik w tej lokalizacji, mogłoby to pomóc w złagodzeniu tego problemu.

Nawiasem mówiąc, próbowałem -Pflagi, ale nie jest dostępna jako opcja w przeciwieństwie do dokumentacji.

cpulimit -l 10 -P /home/[username]/public_html/theirwebsite.org/index.php

zwroty

cpulimit: invalid option -- 'P'
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 1600 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --include-children limit also the children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

Wygląda na to, że muszę to zrobić z -eflagą.

Idealnie jednak chciałbym ograniczyć całe konto użytkownika.

I tak, wiem o cloudlinux, ale nie mogę tego teraz zrobić. Dopóki tego nie zrobię, potrzebuję pomocy w ręcznym wykonywaniu czynności, które nie wymagają ponownego uruchomienia serwera.

użytkownik7783780
źródło

Odpowiedzi:

1

Masz rację, że nie możesz ograniczyć swojego przyjaciela za pomocą procesu (PID), Apache spawnuje nowy proces (Worker) dla każdego otrzymanego żądania, przypisując nowy PID za każdym razem.

W zależności od ustawionego WHM -> MultiPHP Manager -> PHP Handlersmodułu obsługi PHP , Apache będzie albo uruchamiał skrypty PHP jako sam, albo uruchamiał je jako użytkownik będący właścicielem pliku. Jeśli użyjesz go suPHPjako procedury obsługi, proces PHP zostanie wykonany jak na koncie, które jest właścicielem pliku.

Jeśli skrypt jest wykonywany przez właściciela, można ograniczyć użycie procesora do konta, dodając go do /etc/security/limits.confpliku. Chociaż nie można tego użyć do dokładnego ograniczenia procentu procesora, można zmodyfikować ich „ładną” wartość, aby ich procesy miały niższy priorytet niż inne procesy na serwerze. W związku z tym inne procesy nie będą musiały czekać tak długo.

Sam nigdy tego nie używałem (uruchamiam CloudLinux), ale uważam, że następujący wpis powinien pomóc w rozwiązaniu problemu:

username    hard    priority    30

To ustawia maksymalny priorytet procesów wykonywanych przez użytkownika na 30. Z tego, co rozumiem, wyższy priorytet w rzeczywistości oznacza, że ​​inne procesy (o niższym priorytecie) otrzymują więcej czasu procesora.

Na moim serwerze z systemem cPanel większość procesów ma priorytet 20, więc zgodnie z powyższą logiką ustawienie priorytetu dla tego użytkownika na 30 powinno pozwolić na wykonanie innych procesów przed tymi procesami.

cascer1
źródło
7

Czy próbowałeś Cgroups ?


  • Zainstaluj usługę sudo yum install libcgroupi uruchom ją sudo service cgconfig start.
  • Po czym wyświetl konfigurację podsystemu dla grup cg, uruchamiając sudo ls /cgroup

Utwórz grupę o nazwie limitcpu. Linie rozpoczynające się od grupy tworzą grupy i ustawiają parametry podsystemu.

Przykład /etc/cgconfig.conf:

group limitcpu{

        cpu {
                cpu.shares = 200;
                # cpu.cfs_period_us
                # cpu.cfs_quota_us
        }
        memory {

        }
}

W celu ograniczenia procesora istnieje kilka parametrów , które można dostosować , aby ograniczyć rażące użycie procesora

Jeśli zadania w grupie będą miały dostęp do jednego procesora przez 0,1 (10%) sekund na 1 sekundę, ustaw cpu.cfs_quota_us na 100000 i cpu.cfs_period_us na 1000000.


Cgred to usługa (która uruchamia usługę cgrulesengd), która przenosi zadania do grup cg zgodnie z parametrami ustawionymi w pliku /etc/cgrules.conf. Wpisy w pliku /etc/cgrules.conf mogą mieć jedną z następujących dwóch postaci:

user subsystems control_group
user:command subsystems control_group

Gdzie userz nazwą użytkownika lub nazwą grupy poprzedzoną znakiem „@”. Zastąp subsystemsrozdzieloną przecinkami listą nazw podsystemów, control_groupreprezentuje ścieżkę do grupy cg i commandoznacza nazwę procesu lub pełną ścieżkę polecenia procesu.

Przykład etc / cgrules.conf:

*:firefox      cpu,memory      browsers/
@admin:memhog  memory          limitmem/
cpuhog         cpu             limitcpu/
  • firefoxprocesy uruchomione przez dowolnego użytkownika będą automatycznie dodawane do przeglądarek cgroupi ograniczone w podsystemach procesora i pamięci.

  • memhogprocesy uruchomione przez kogokolwiek w admingrupie zostaną dodane do grupy limitmemi ograniczone do podsystemu pamięci.

    - Twój użytkownik cpuhogzostanie dodany do grupy „limitcpu” i ograniczony w podsystemach procesora.


W przypadku wcześniejszego użycia możesz zamiast tego spróbować użyć szablonu.

Na przykład określ następujący szablon w pliku /etc/cgconfig.conf:

template users/%g/%u {
                     cpuacct{
                     }
                     cpu {
                        cpu.shares = "1000";
                     }
          }

Następnie użyj szablonu users /% g /% u w trzecim rzędzie wpisu /etc/cgrules.conf, który może wyglądać następująco:

peter:ftp       cpu     users/%g/%u

Te %g and %uzmienne użyte powyżej są automatycznie zastępowane grupy i nazwa użytkownika w zależności od właściciela procesu ftp.

Jeśli proces należy do Petera z grupy adminstaff, powyższa ścieżka jest tłumaczona na users/adminstaff/peter.

Usługa cgred następnie wyszukuje ten katalog, a jeśli nie istnieje, cgred go tworzy i przypisuje proces do użytkowników / adminstaff / peter / tasks.

Należy pamiętać, że reguły szablonów dotyczą tylko definicji szablonów w plikach konfiguracyjnych, więc nawet jeśli w grupie /etc/cgconfig.conf zdefiniowano „grupa użytkowników / adminstaff / peter”, zostanie zignorowany na korzyść „użytkowników szablonów /% g /% u ”.

Samouczek od Digital Ocean.

Wprowadzenie do grup kontrolnych.

Carrein
źródło
0

Prawdopodobnie możesz spróbować skonfigurować /etc/security/limits.conf tam, powinieneś być w stanie dostosować, ile czasu procesora i pamięci może zużyć użytkownik. Aby uzyskać szczegółowe informacje, patrz https://linux.die.net/man/5/limits.conf

sebastienvg
źródło