Quá trình MySQL chiếm hơn 100% mức sử dụng CPU


10

Tôi đang gặp một số vấn đề với máy chủ LAMP của tôi. Gần đây, mọi thứ trở nên rất chậm, mặc dù số lượng khách truy cập trên các trang web của tôi không thay đổi nhiều. Khi tôi chạy toplệnh, nó nói rằng quá trình MySQL đã chiếm hơn 150-200% CPU. Làm thế nào có thể, tôi luôn nghĩ rằng 100% là tối đa?

Tôi đang chạy phiên bản máy chủ Ubuntu 9.04 với RAM 1,5 GB.

my.cnf cài đặt:

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

Đây là đầu ra của MySQLTuner :

Đầu ra MySQLTuner

Các toplệnh:

đầu ra hàng đầu

Điều gì có thể là nguyên nhân của vấn đề này? Tôi có thể thay đổi my.cnfđể ngăn máy chủ treo không?

Câu trả lời:


15
  1. Tăng bộ đệm chính (hiện tại của bạn là 64 MB, nhưng tổng chỉ số là 116M, vì vậy hãy đặt ít nhất 128 MB). Nên giúp ngay.
  2. Chạy mysqloptizesmysqlrepair trên các bảng của bạn
  3. Tăng bộ đệm bảng / giảm tổng số bảng để tăng tỷ lệ nhấn bộ đệm bảng. Có thể bạn đã có một số bảng không sử dụng hoặc cũ có thể bị xóa.

Các tùy chọn giới thiệu khác được đề nghị:

  • log_slow_queries = /var/log/mysql/mysql-slow.log
  • long_query_time = 4
  • log-truy vấn-không sử dụng chỉ mục

Kiểm tra tệp nhật ký sau một thời gian.


Cảm ơn bạn đã giới thiệu, tôi sẽ thử chúng và cho bạn biết nếu nó giúp.
Temnovit

Xin vui lòng cho tôi biết, làm thế nào bạn tính toán rằng tổng chỉ số là 116M?
Temnovit

tự mình hiểu đi :)
Temnovit

5

Bạn có bộ xử lý có nhiều lõi hoặc bạn có nhiều bộ xử lý. Nếu bạn có hai lõi và một quá trình đang sử dụng 100% cả hai lõi, nó sẽ hiển thị 200% trong top.

Tương tự như vậy, điều này có khả năng hoạt động như dự định - không có gì sai với cấu hình của bạn. Nếu bạn gặp phải tình trạng treo máy thường xuyên, từ những gì bạn đã đăng, bạn có thể muốn xem xét thêm các chỉ mục thích hợp vào các bảng của mình (hoặc tối ưu hóa các truy vấn của bạn).


5

Chạy top -Hđể xem tất cả các chủ đề đang chạy và không chỉ là quá trình tổng thể. Ngoài ra, nếu bạn nhấn 1phím trong khi ở trên cùng, nó sẽ hiển thị cho bạn cách sử dụng cpu cho các CPU / lõi riêng lẻ.


Cảm ơn, điều này thực sự giúp tôi - đã sử dụng hàng đầu trong nhiều năm và không biết nó có khả năng này. Tôi thấy rằng có một luồng mysql "vĩnh cửu" tiêu tốn 60% CPU người dùng mọi lúc, trong khi các luồng truy vấn đến và đi trên đầu trang này. Bây giờ để tìm hiểu xem chủ đề này thực sự đang làm gì ...
scipilot

1

Mysql có nhiều tiến trình (luồng) hoạt động độc lập, ví dụ, một quy trình chịu trách nhiệm ghi dữ liệu từ bộ nhớ vào đĩa. Với nhiều lõi trong CPU (và / hoặc nhiều CPU), có nhiều hơn một luồng đang hoạt động và do đó, nó có thể chạy hơn 100% một lõi - ở mức độ đơn giản, có thể 75% mỗi lõi trong số hai lõi đang chạy , cho 150%.


1

Tôi đã nhận thấy một vấn đề, không liên quan đến CPU. Nếu bạn đang sử dụng apache và MySQL trên cùng một máy chủ, bạn có thể gặp tình trạng xấu ( RAM ) khi hoạt động apache của bạn tăng lên.

MySQLTunner cho bạn biết rằng bằng cách sử dụng 200 kết nối khả dụng (cài đặt kết nối tối đa của bạn), bạn sẽ lấp đầy RAM. Giả sử bạn đã giới hạn apache tới 150 tiến trình, chắc chắn bạn sẽ không có đủ RAM khi MySQL và apache sẽ cố gắng sử dụng 150 liên kết (vì Apache cũng là một kẻ ăn RAM tốt).

Vì vậy, đây là về RAM và bạn có thể chưa gặp phải :-) Các lệnh hàng đầu chỉ hiển thị 15 quá trình apache (nhưng bạn đang tải trung bình 3/6/16 nên điều đó có nghĩa là cơn bão đã xảy ra 15 phút trước và hiện đang ở trong rời đi).

Về vấn đề CPU, để bổ sung cho phản hồi tốt của shakalandy , điều này có thể là do một truy vấn duy nhất. Nó có thể nằm trên một bảng lớn hoặc thực hiện nhiều tác vụ lập chỉ mục lại hoặc sử dụng nhiều tệp tạm thời, chỉ mục bị thiếu (đã xóa?), V.v ... Cách duy nhất để phát hiện nó là kích hoạt nhật ký truy vấn chậm (có thể với tốc độ cao, như 8 giây). Sau đó, sử dụng công cụ mysqlsla để phân tích nhật ký truy vấn chậm này và chạy một số giải thích về các truy vấn đã xác định.


Thật vậy, cảm ơn bạn, mysql không phải là quá trình duy nhất xung quanh :)
Temnovit
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.