Mam problemy z moim serwerem LAMP. Ostatnio wszystko stało się bardzo wolne, mimo że liczba odwiedzających na moich stronach niewiele się zmieniła. Kiedy uruchamiam top
polecenie, mówi, że proces MySQL przejął 150-200% procesora. Jak to możliwe, zawsze myślałem, że 100% to maksimum?
Używam wersji serwerowej Ubuntu 9.04 z 1,5 GB pamięci RAM.
my.cnf
ustawienia:
key_buffer = 64M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 200
table_cache = 512
table_definition_cache = 512
thread_concurrency = 2
read_buffer_size = 1M
sort_buffer_size = 4M
join_buffer_size = 1M
query_cache_limit = 1M # the maximum size of individual query results
query_cache_size = 128M
Oto wynik MySQLTuner :
top
Polecenie:
Co może być przyczyną tego problemu? Czy mogę wprowadzić zmiany w moim, my.cnf
aby zapobiec zawieszeniu się serwera?
mysql
performance
cpu-usage
Temnovit
źródło
źródło
Masz procesor, który ma więcej niż jeden rdzeń lub masz wiele procesorów. Jeśli masz dwa rdzenie, a proces wykorzystuje 100% obu rdzeni, wyświetli się jako 200% u góry.
Podobnie, prawdopodobnie działa to zgodnie z przeznaczeniem - nie ma nic złego w konfiguracji. Jeśli często się zawieszasz, na podstawie tego, co opublikowałeś, możesz spróbować dodać do swoich tabel odpowiednie indeksy (lub zoptymalizować zapytania).
źródło
Uruchom,
top -H
aby zobaczyć wszystkie działające wątki, a nie tylko cały proces. Ponadto, jeśli naciśniesz1
klawisz na górze, pokaże użycie procesora dla poszczególnych procesorów / rdzeni.źródło
Mysql ma wiele procesów (wątków) działających niezależnie, jeden, na przykład, jest odpowiedzialny za zapis danych z pamięci na dysk. Dzięki wielu rdzeniom w procesorze (i / lub wielu procesorom) działa więcej niż jeden wątek, dzięki czemu może on uruchamiać ponad 100% jednego rdzenia - na uproszczonym poziomie, może 75% każdego z dwóch rdzeni działa , co daje 150%.
źródło
Zauważyłem problem niezwiązany z procesorem. Jeśli używasz Apache i MySQL na tym samym serwerze, możesz osiągnąć złe warunki ( RAM ), gdy zwiększysz aktywność Apache.
MySQLTunner mówi ci, że używając 200 dostępnych połączeń (twoje maksymalne ustawienie połączenia) wypełnisz pamięć RAM. Powiedzmy, że masz ograniczony proces Apache do 150, na pewno nie będziesz mieć wystarczającej ilości pamięci RAM, gdy MySQL i Apache spróbują użyć 150 połączeń (ponieważ Apache jest również dobrym serwerem pamięci RAM).
Chodzi o pamięć RAM i być może jeszcze nie trafiłeś :-) Najważniejsze polecenia pokazują tylko 15 procesów apache (ale przeciążasz się średnio 3/6/16, co oznacza, że burza miała miejsce 15 minut temu i jest teraz w odejście).
Jeśli chodzi o problem z procesorem, aby uzupełnić dobrą odpowiedź shakalandy , może to wynikać z jednego zapytania. Może znajdować się na dużym stole lub wykonywać wiele zadań związanych z ponownym indeksowaniem, lub używać dużej liczby plików tymczasowych, brakującego indeksu (usunięty?) Itp. Jedynym sposobem na jego wykrycie jest aktywowanie dziennika powolnych zapytań (być może z wysokim progiem, jak 8s). Następnie użyj narzędzia mysqlsla , aby przeanalizować ten wolny dziennik zapytań i uruchomić wyjaśnienie zidentyfikowanych zapytań.
źródło