Quá nhiều quy trình MySQL


12

Tôi đang cố gắng giúp một người bạn với máy chủ của anh ấy sau khi anh ấy nói với tôi rằng MySQL của anh ấy đã sử dụng quá nhiều bộ nhớ ... Hóa ra nó không chỉ sử dụng nhiều bộ nhớ mà còn có quá nhiều quá trình mysql chạy!

Đây là kết quả của ps auxww|grep mysql: http://pastebin.com/kYrHLXVW

Vì vậy, về cơ bản có 13 quy trình MySQL và chỉ có 1 máy khách được kết nối theo mysqladmin ...

Sau một thời gian, mỗi quá trình này ăn tới 50mb bộ nhớ nên cuối cùng nó tiêu tốn rất nhiều bộ nhớ ...

Tôi đang sử dụng mẫu cấu hình my-Medium.cnf trực tiếp từ / usr / share / mysql ... Tôi đã khởi động lại máy chủ mysql nhưng ngay khi nó khởi động, 13 quy trình đã hoạt động trở lại ... Tôi không biết gì về vấn đề có thể là ... bất kỳ ý tưởng / đề xuất nào sẽ thực sự được đánh giá cao!

Câu trả lời:


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

Họ không sử dụng 13 * 50mb ram - có lẽ họ đang sử dụng một cái gì đó giống như 70MB tổng . Hãy nhớ rằng linux sẽ chia sẻ các trang bộ nhớ chưa sửa đổi giữa các quy trình, vì vậy nếu máy chủ của bạn mới khởi động thì hầu hết bộ nhớ đó sẽ được chia sẻ. Trong thực tế, vì mysql được xâu chuỗi nên có lẽ sẽ chỉ còn ít bộ nhớ được phân bổ cho mỗi luồng. Nếu bạn lo lắng về việc sử dụng bộ nhớ của từng quy trình mysql, hãy xem /etc/mysql/my.cnfvà xem các biến trong phần mysqld:

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

Mặc dù được cảnh báo rằng đó là những biến rất mạnh để điều chỉnh và bạn có thể dễ dàng giết chết hiệu suất mysql của mình khi đặt chúng quá thấp hoặc lãng phí bộ nhớ có thể được sử dụng ở nơi khác bằng cách đặt chúng quá cao.

Một điểm khởi đầu dễ dàng để tìm ra cách tốt nhất để điều chỉnh phiên bản mysql của bạn là chạy ứng dụng của bạn một chút, sau đó chạy tập lệnh mysqltune từ đây , sẽ phân tích các bộ đếm hiệu suất của bạn, sau đó đưa ra khuyến nghị về những gì bạn nên thay đổi cấu hình máy chủ của bạn.


1
Tôi không biết mysqltune, cảm ơn rất hữu ích. Ngoài ra, người ta có thể sử dụng htopđể tô màu các chủ đề của chúng tôi và xem bộ nhớ thực tế được sử dụng cho mỗi quy trình.
mveroone

3

Linux hiển thị các luồng như các quy trình riêng biệt. MySQL bắt đầu một luồng trên mỗi kết nối. Chạy psvới f. Ví dụ, ps auxfwsẽ hiển thị cách các chủ đề có liên quan.

Có bao nhiêu kết nối tới MySQL? Chạy show full processlist;trong máy khách MySQL. Từ những gì bạn đang thể hiện, tôi thậm chí không tự tin rằng có gì sai.


Dưới đây là kết quả: pastebin.com/raw.php?i=XNCsG6KS Các máy chủ được chỉ bắt đầu không chắc chắn nếu nó giúp ... Bởi init script bạn có nghĩa là nội dung của /etc/init.d/mysql?
dùng24994

Điều đó có vẻ hoàn toàn bình thường với tôi.
Warner

Theo show full processlistđó có 2 kết nối đến cơ sở dữ liệu. Một trong số họ đang thực thi localhost show full processlist, người còn lại cũng là tôi, thông qua phpmyadmin. Không nên có thêm kết nối vì trang web chưa hoạt động ...
user24994

Lượng kết nối sẽ phụ thuộc vào cách ứng dụng của bạn hoạt động và không nhất thiết liên quan trực tiếp đến số lượng người dùng. MySQL sử dụng bộ nhớ dựa trên cài đặt cnf. Điều gì khiến bạn nghĩ rằng nó làm bất cứ điều gì sai?
Warner

Xin lỗi, tôi đoán nó không thực sự rõ ràng trong câu hỏi của tôi haha, hoàn toàn có thể là không có gì sai xảy ra! Tôi chỉ nhận thấy rằng mysql đã sử dụng rất nhiều bộ nhớ (khoảng 13 * 50mb, vì vậy 650mb ram) và chưa có lưu lượng truy cập đến trang web ... Chỉ cần tôi loay hoay trong phpmyadmin. Vì vậy, tôi đoán câu hỏi của tôi là nhiều hơn "Có gì sai?" thay vì "Có gì sai" :)
user24994

1

Bạn có thể muốn dùng thử MySQLTuner mà tôi thấy rất hữu ích, nó sẽ gợi ý cho bạn các biến cấu hình nào bạn nên thử điều chỉnh.


Đối với những người đọc mới, tập lệnh MySQLTuner được đặt ở đây: mysqltuner.pl
Jesper Grann Laursen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.