Ostatnio mój procesor serwera jest bardzo wysoki.
Średnie obciążenie procesora 13,91 (1 min) 11,72 (5 min) 8,01 (15 min), a moja witryna odnotowała jedynie niewielki wzrost ruchu.
Po uruchomieniu górnego polecenia zobaczyłem, że MySQL używa 160% procesora!
Ostatnio optymalizuję tabele i przełączyłem się na trwałe połączenia. Czy może to powodować, że MySQL używa dużej ilości procesora?
Odpowiedzi:
Najpierw powiedziałbym, że prawdopodobnie chcesz wyłączyć trwałe połączenia, ponieważ prawie zawsze wyrządzają więcej szkody niż pożytku.
Po drugie, powiedziałbym, że chcesz dokładnie sprawdzić użytkowników MySQL, aby upewnić się, że nikt nie może połączyć się ze zdalnego serwera. Jest to także ważna kwestia bezpieczeństwa do sprawdzenia.
Po trzecie, powiedziałbym, że chcesz włączyć dziennik wolnych zapytań MySQL, aby mieć oko na wszelkie zapytania, które zajmują dużo czasu, i użyj go, aby upewnić się, że nie masz żadnych zapytań blokujących tabele kluczy zbyt długo.
Inne rzeczy, które można sprawdzić, to uruchomienie następującego zapytania, gdy obciążenie procesora jest wysokie:
Spowoduje to wyświetlenie zapytań, które są aktualnie uruchomione lub w kolejce do uruchomienia, co to jest zapytanie i co robi (to polecenie skróci zapytanie, jeśli jest zbyt długie, możesz użyć POKAŻ PEŁNĄ PROCESLISTĘ, aby zobaczyć pełny tekst zapytania) .
Warto również, aby mieć oko na takie rzeczy jak swojej wielkości bufora, stół cache , cache zapytań i innodb_buffer_pool_size (jeśli używasz tabel InnoDB), a wszystkie te alokacji pamięci może mieć wpływ na wydajność zapytań, które mogą doprowadzić do MySQL zjedz procesor.
Prawdopodobnie zechcesz także przeczytać poniższe, ponieważ zawierają one dobre informacje.
Bardzo dobrym pomysłem jest również użycie profilera. Coś, co możesz włączyć, kiedy chcesz, to pokaże, jakie zapytania są uruchomione przez twoją aplikację, jeśli są duplikaty zapytań, jak długo je zajmują itp. Itp. Przykładem czegoś takiego jest to, nad którym pracuję, nazywane PHP Profiler, ale jest ich wiele. Jeśli używasz oprogramowania takiego jak Drupal, Joomla lub Wordpress, zechcesz zapytać w społeczności, ponieważ prawdopodobnie są dla nich dostępne moduły, które pozwalają uzyskać te informacje bez konieczności ręcznej integracji.
źródło
Ponieważ jest to najwyższy post, jeśli używasz wysokiego obciążenia procesora lub obciążenia MySQL, dodam dodatkową odpowiedź:
1 lipca 2012 r. Dodano sekundę przestępną do aktualnego czasu UTC, aby zrekompensować spowolnienie obrotu Ziemi z powodu pływów. Podczas uruchamiania ntp (lub ntpd) ta sekunda została dodana do zegara twojego komputera / serwera. MySQLd wydaje się nie lubić tej dodatkowej sekundy w niektórych systemach operacyjnych i zapewnia duże obciążenie procesora. Szybka poprawka to (jako root):
źródło
date
" && service ntp start Wykorzystanie procesora MySQL natychmiast spadło z 50 - 100% do 0 - 1%sudo service ntpd stop
w tej konfiguracji.Jeśli ten serwer jest widoczny dla świata zewnętrznego, warto sprawdzić, czy ma wiele żądań połączenia ze świata zewnętrznego (tj. Osób próbujących się do niego włamać)
źródło