너무 많은 MySQL 프로세스


12

MySQL이 너무 많은 메모리를 사용하고 있다고 말한 후 서버와 친구를 돕기 위해 노력하고 있습니다 ... 많은 메모리를 사용하고있을뿐만 아니라 너무 많은 mysql 프로세스가 실행되고 있음이 밝혀졌습니다!

결과는 다음과 같습니다 ps auxww|grep mysql. http://pastebin.com/kYrHLXVW

따라서 기본적으로 13 개의 MySQL 프로세스가 있으며 mysqladmin에 따라 하나의 클라이언트 만 연결되어 있습니다 ...

잠시 후, 이러한 각 프로세스는 최대 50MB의 메모리를 사용하므로 많은 메모리를 소비하게됩니다.

/ usr / share / mysql에서 바로 my-medium.cnf 구성 템플릿을 사용하고 있습니다 ... mysql 서버를 다시 시작했지만 시작하자마자 13 개의 프로세스가 다시 시작됩니다 ... 문제는 ... 어떤 아이디어 / 제안도 정말 감사하겠습니다!

답변:


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 ... ]

그들은 13 * 50mb의 램을 사용하지 않습니다. 아마도 총 70MB와 같은 것을 사용하고있을 것입니다 . 리눅스는 프로세스간에 수정되지 않은 메모리 페이지를 공유하므로 서버가 새로 시작되면 대부분의 메모리가 공유됩니다. 사실, mysql이 스레드되기 때문에 스레드 당 할당되는 메모리는 훨씬 적을 것입니다. 각 mysql 프로세스의 메모리 사용에 대해 우려가있는 경우을보고 /etc/mysql/my.cnfmysqld 섹션의 변수를 확인하십시오.

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

그러나 변수는 조정하기에 매우 강력한 변수이므로 mysql 성능을 너무 낮게 설정하거나 쉽게 설정하여 다른 곳에서 사용할 수있는 메모리를 낭비 할 수 있습니다.

mysql 인스턴스를 조정하는 가장 좋은 방법을 찾는 쉬운 출발점 중 하나는 앱을 약간 실행 한 다음 여기 에서 mysqltune 스크립트를 실행 하여 성능 카운터를 분석 한 다음 변경해야 할 사항에 대한 권장 사항을 생성하는 것입니다 서버 구성.


1
나는 mysqltune매우 유용한 감사를 몰랐다 . 또한 htop스레드를 채색하고 프로세스 당 사용 된 실제 메모리를 볼 수 있습니다.
— mveroone

3

리눅스는 스레드를 별도의 프로세스로 보여줍니다. MySQL은 연결 당 하나의 스레드를 시작합니다. 로 실행 중 ps입니다 f. 예를 들어 ps auxfw스레드가 어떻게 관련되어 있는지 표시합니다.

MySQL에는 몇 개의 연결이 있습니까? show full processlist;MySQL 클라이언트에서 실행하십시오 . 당신이 보여주는 것에서, 나는 무엇이 잘못되었다고 확신조차하지 않습니다.


여기서 결과는 다음과 같습니다 pastebin.com/raw.php?i=XNCsG6KS는 서버가 한 단지 당신이 /etc/init.d/mysql 형태의 내용을 의미합니까 초기화 스크립트에 의해 ... 확실하지 도움이된다면 시작?
— user24994

그것은 나에게 완벽하게 정상적인 것 같습니다.
— 워너

에 따르면 show full processlist데이터베이스에이 개 연결이 있습니다. 그중 하나는 localhost를 실행 show full processlist하고 다른 하나는 phpmyadmin을 통해 나입니다. 사이트가 아직
— 활성화

연결의 수는 응용 프로그램의 성능에 따라 달라지며 반드시 사용자 수와 직접 관련되지는 않습니다. MySQL은 cnf 설정에 따라 메모리를 사용합니다. 무엇이 잘못되고 있다고 생각합니까?
— 워너

죄송합니다, 내 질문에 정말 명확하지 않은 것 같습니다. 하찮은 일이 일어나지 않을 것입니다. 방금 mysql이 많은 메모리 (약 13 * 50mb, 650mb의 램)를 사용하고 있으며 아직 사이트에 트래픽이 없음을 알았습니다 ... phpmyadmin에서 엉망이되었습니다. 그래서 제 질문은 "문제가 있습니까?" "무슨 문제"대신 :)
— user24994

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.