Sposoby na zmniejszenie load average

Jakiś pomysł może ktoś ma jak zmniejszyć duży load average ?

W mojej aplikacji jest duży ruch, optymalizacje kwerend już nie wystarczają

Jakiej aplikacji, co pożera procek, ile masz procesów?

(polecenie top, sortowanie po zużyciu procesora)

chodzi ogólnie o aplikację w PHP na serwerze apache na która składa się CRM/CMS, 6 sklepów internetowych oraz WMS, wszystko stoi na jednej bazie mysql i serwerze apache, używam htop co pokazuje około 10 procesów apache oraz około 5 mysqld

Sortując po użyciu procesora przeważnie na samej górze jest mysql z użyciem, czasami nawet 800%. Procesor jest 4rdzeniowy, 8wątkowy, 20GB RAM

Baza danych zajmuje ~9GB

analizuje po slow queries i je eliminuję (w miarę możliwości) a tak poza tym to nie mam już pomysłów na znalezienie wąskich gardeł :frowning:

Skoro masz mysql-slow to widzisz też wolne zapytania. Może być źle zoptymalizowana lub uszkodzona, co nie raz widziałem na mysql. Musisz przejrzeć też w /var/log/apache2/error.log patrząc na błędy PHP.

Ile mają wejść/żądań te sklepy, CRM i CMSy?

Może jednak trzeba zwirtualizować maszynę, wydzielić osobne maszyny na najbardziej obciążające serwisy, przydzielić zasoby itp.

Na razie kupiliśmy silniejszy serwer i podzieliliśmy to na dwie wirtualne części gdzie apache jest na jednej i mysql na drugiej, po 6 rdzeni każda, Debian miał problem się uruchomić na wiecej niż 6 rdzeni. Jak na razie utrzymujemy load ~4 tu gdzie apache i dla mysql poniżej 2. Dyski w raid 1, pomogło wiele

To może z jakiegoś keszowania skorzystać, memcache albo jakieś inne?

Masz jakieś akceleratory PHP typu eaccelerator? Zabezpieczenie typu Suhosin z poprawnymi limitami?

Jeśli to Intelowski 1 procesor 6 rdzeni 12 wątków (HT) to nie powinien mieć problemu.

Jeśli to AMD to nie ma HT, wtedy jest opcja 2 CPU po 6 rdzeni.

Z tego co piszesz wynika, żeten Debian nie obsługuje SMP.

Obciązenie będzie takie nawet przy niewielkiej liczbie wejść. Wystarczy że następuje próba odczytu w PHP nieistniejącego pliku, lub zapis do miejsca gdzie nie ma uprawnień, do tego np. 20 wywołać ten sam plik (boty albo przeglądarka czasem tak potrafi zrobić), jeszcze jeśli gdzieś jest jakiś generator działający w locie - wszystko elegancko zarżnie nawet Xeona.

Równie dobrze powodem może być duża ilość wejść (choćby odczytów zdjęć zamieszczonych na aukcjach), tak więc jeśli nie masz skryptu do skanowania acces.log to powinieneś zainstalować jakieś statystyki, które co kilka(naście dni) w nocy generują rezultaty. Zobaczysz jak wygląda sytuacja.

Możesz podzielić maszynę na 4 wirtualne serwery - 1 myslq + 1 apache do jednej lub kilku stron najbardziej wymagających, 1 mysql + 1 apache do reszty.

Memcached używamy

Procesor jest Intel Xeon E5-1650. Jest duża częstotliwość wywoływania zapytań, a statystyk używamy munin. Na wykresach loadów widzę wzloty i upadki ale niestety mam problem z namierzeniem skryptów, miejsc które to powodują. System ma dużo generatorów raportów i to może być przyczyna, tyle że tego nie można wyeliminować czasami musi przelecieć połowe bazy aby zrobić raport co trwa około minuty.

A z pomysłem na przejście na 4 maszyny sie zastanowię, wydaje mi sie że to dobry pomysł aby odizolować od siebie najbardziej wymagające części

Jeszcze bierzemy pod uwagę przejście z apache na lighttpd

Osobiście będę miał okazję to sprawdzę w przeciągu kilku-kulkunastu dni (na testach mam parę linuxów, tylko czasu brakuje). Czuje że mogą pojawić się kłopoty ze stronami, ale dopóki człowiek nie sprawdzi to sie nie dowie.

Pracowałem nad lighthttpd kilka lat temu, ale nie miał m.in. przyjaznych linków (czyli miał linki /?a=b&c=d zamiast /b/c/d/), uboższą obsługę pewnych funkcji, więc został wtedy zastąpiony apache.

to duży problem w takim razie, nie wiedziałem o tym. Skoro tak to raczej nie skorzystam bo na tym się opiera u nas wszystko, to byłaby zbyt duża przebudowa

wymien apache na ngninx. obsluguje “przyjazne” linki. jednak bedziesz musiał troszke zmienić reguły