Zbyt wiele procesów MySQL

12

Próbuję pomóc przyjacielowi z jego serwerem po tym, jak powiedział mi, że MySQL zużywa za dużo pamięci ... Okazuje się, że nie tylko zużywa dużo pamięci, ale działa zbyt wiele procesów mysql!

Oto wynik ps auxww|grep mysql: http://pastebin.com/kYrHLXVW

Zasadniczo istnieje 13 procesów MySQL i tylko 1 klient jest podłączony zgodnie z mysqladmin ...

Po pewnym czasie każdy z tych procesów zużywa do 50 MB pamięci, więc ostatecznie zużywa DUŻO pamięci ...

Korzystam z szablonu konfiguracji my-medium.cnf prosto z / usr / share / mysql ... Zrestartowałem serwer mysql, ale jak tylko się uruchomi, 13 procesów powróciło ... Nie mam pojęcia, co problemem może być ... wszelkie pomysły / sugestie byłyby bardzo mile widziane!

użytkownik24994
źródło

Odpowiedzi:

16
mysql     9804  0.0  0.6 58556 22960 pts/0   S    12:43   0:00  \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9807  0.0  0.6 58556 22960 pts/0   S    12:43   0:00      \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9808  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9809  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9810  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
[ ... repeated output truncated ... ]

Nie używasz 13 * 50MB RAM - Pewnie za pomocą czegoś podobnego 70MB sumy . Pamiętaj, że ten system Linux będzie współużytkować niezmodyfikowane strony pamięci między procesami, więc jeśli twój serwer zostanie świeżo uruchomiony, większość tej pamięci zostanie udostępniona. W rzeczywistości, ponieważ mysql jest wątkowy, prawdopodobnie będzie tylko mniej przydzielonej pamięci na wątek. Jeśli martwisz się wykorzystaniem pamięci przez każdy proces mysql, spójrz na /etc/mysql/my.cnfzmienne w sekcji mysqld:

  • key_buffers
  • thread_stack
  • thread_cache_size
  • max_connections
  • query_cache_limit
  • query_cache_size

Ostrzegamy jednak, że są to bardzo potężne zmienne, które można dostroić, i możesz łatwo zabić swoją wydajność mysql, ustawiając je na zbyt niskim poziomie lub marnować pamięć, którą można by wykorzystać w innym miejscu, ustawiając je na zbyt wysokie.

Jednym z łatwych punktów wyjścia do znalezienia najlepszego sposobu dostrojenia instancji mysql jest uruchomienie aplikacji na chwilę, a następnie uruchomienie skryptu mysqltune z tego miejsca , który przeanalizuje liczniki wydajności, a następnie wygeneruje zalecenie dotyczące tego, co należy zmienić twoja konfiguracja serwera.

Jason
źródło
1
Nie wiedziałem mysqltune, bardzo przydatne dzięki. Można również użyć htopdo pokolorowania naszych wątków i zobaczyć rzeczywistą pamięć używaną na proces.
mveroone
3

Linux pokazuje wątki jako osobne procesy. MySQL uruchamia jeden wątek na połączenie. Bieg psz f. Na przykład ps auxfwwyświetli sposób powiązania wątków.

Ile jest połączeń z MySQL? Uruchom show full processlist;w kliencie MySQL. Z tego, co pokazujesz, nie jestem nawet pewien, czy coś jest nie tak.

Warner
źródło
Oto wynik: pastebin.com/raw.php?i=XNCsG6KS Serwer właśnie został uruchomiony Nie jestem pewien, czy to pomaga ... Skrypty init mają na myśli zawartość /etc/init.d/mysql?
user24994,
Dla mnie to wygląda zupełnie normalnie.
Warner
Według danych show full processlististnieją 2 połączenia z bazą danych. Jeden z nich jest wykonywany przez localhost show full processlist, drugi to także ja, przez phpmyadmin. Nie powinno być już żadnego połączenia, ponieważ strona jeszcze nie działa ...
user24994
Liczba połączeń będzie zależeć od wydajności aplikacji i niekoniecznie będzie bezpośrednio związana z liczbą użytkowników. MySQL wykorzystuje pamięć na podstawie ustawienia cnf. Co sprawia, że ​​myślisz, że robi coś źle?
Warner
Przepraszam, myślę, że to nie było do końca jasne w moim pytaniu haha, jest całkiem możliwe, że nie dzieje się nic złego! Właśnie zauważyłem, że mysql zużywa dużo pamięci (około 13 * 50 MB, czyli 650 MB pamięci RAM) i nie ma jeszcze ruchu na stronie ... Po prostu bawię się w phpmyadmin. Myślę, że moje pytanie brzmiało bardziej: „Czy coś jest nie tak?” zamiast „Co się stało” :)
user24994
1

Możesz wypróbować MySQLTuner, który uważam za bardzo pomocny, zasugeruje ci, które ze zmiennych konfiguracyjnych powinieneś spróbować dostosować.

icc97
źródło
Dla nowych czytelników skrypt MySQLTuner znajduje się tutaj: mysqltuner.pl
Jesper