Làm cách nào để điều chỉnh apache khi tôi thấy CPU cao, nhưng sử dụng bộ nhớ thấp?


8

Các nút web CentOS của tôi (LAMP stack) đang sử dụng CPU cao nhưng sử dụng bộ nhớ thấp. Gần như tất cả các quá trình là apache. Tôi biết tôi chỉ có thể thêm các nút web bổ sung cho đến khi việc sử dụng cpu của tôi trở nên hợp lý, nhưng tôi tưởng tượng có một số mẹo điều chỉnh nhanh có thể đi một chặng đường dài ở đây.

CPU bị trả lại từ 90 đến 100%. Mysql bị trả lại từ 5% đến 45%. Apache chiếm phần còn lại.

Hàng đầu:

top - 21:15:49 up 46 days, 20:39,  4 users,  load average: 34.17, 44.62, 51.03
Tasks: 133 total,  32 running, 101 sleeping,   0 stopped,   0 zombie
Cpu(s): 90.4%us,  9.6%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   8388608k total,  6116448k used,  2272160k free,    84160k buffers
Swap: 16777208k total,       68k used, 16777140k free,  3488044k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15775 mysql     15   0  827m 153m 3712 S 43.7  1.9   0:55.04 mysqld
15911 apache    16   0  275m  10m 3872 S 24.1  0.1   0:03.15 httpd
15816 apache    16   0  288m  23m 4116 R 23.5  0.3   0:11.88 httpd
15807 apache    15   0  281m  17m 5028 S 21.5  0.2   0:11.71 httpd
15897 apache    16   0  277m  13m 4104 S 21.2  0.2   0:02.68 httpd
15834 apache    16   0  276m  11m 3916 S 20.6  0.1   0:05.22 httpd
15842 apache    16   0  275m  11m 4116 S 19.3  0.1   0:07.86 httpd
15870 apache    16   0  294m  30m 5044 R 17.4  0.4   0:06.36 httpd
15782 apache    15   0  278m  13m 4124 R 12.2  0.2   0:08.54 httpd
15819 apache    15   0  280m  17m 5016 S 11.6  0.2   0:07.01 httpd
15683 apache    16   0  288m  23m 4128 R 10.9  0.3   0:09.90 httpd
15876 apache    16   0  284m  19m 3880 R 10.6  0.2   0:04.35 httpd
15878 apache    15   0  276m  11m 4104 S 10.6  0.1   0:06.42 httpd
15913 apache    16   0  275m  10m 3920 R  9.6  0.1   0:07.98 httpd
15898 apache    16   0  280m  16m 4104 S  9.3  0.2   0:02.85 httpd
15817 apache    16   0  277m  13m 4108 S  9.0  0.2   0:05.55 httpd
15843 apache    16   0  280m  15m 4104 R  8.7  0.2   0:10.80 httpd
15812 apache    16   0  280m  16m 5012 R  8.0  0.2   0:05.18 httpd
15844 apache    16   0  281m  16m 4116 R  7.4  0.2   0:08.63 httpd
15833 apache    16   0  281m  18m 5036 R  7.1  0.2   0:04.76 httpd
15795 apache    16   0  280m  15m 3920 R  6.8  0.2   0:08.65 httpd
15704 apache    15   0  280m  16m 4096 S  6.4  0.2   0:09.06 httpd
15849 apache    16   0  280m  15m 4124 R  6.4  0.2   0:05.59 httpd
15806 apache    16   0  276m  11m 3876 S  6.1  0.1   0:10.33 httpd
15902 apache    16   0  280m  15m 3912 R  6.1  0.2   0:03.40 httpd
15688 apache    16   0  279m  14m 4116 R  5.8  0.2   0:06.07 httpd
15904 apache    16   0  280m  15m 3860 R  5.8  0.2   0:02.74 httpd
15703 apache    16   0  281m  17m 5048 R  5.1  0.2   0:03.86 httpd
15705 apache    16   0  281m  17m 5044 R  4.5  0.2   0:13.54 httpd
15821 apache    15   0  276m  11m 4072 S  4.5  0.1   0:04.24 httpd
15830 apache    16   0  278m  13m 4112 R  4.2  0.2   0:06.37 httpd
15850 apache    16   0  277m  12m 3872 R  3.9  0.2   0:04.64 httpd
15912 apache    15   0  276m  11m 3920 S  3.9  0.1   0:05.58 httpd
15804 apache    15   0  280m  15m 3932 R  3.5  0.2   0:09.13 httpd
15805 apache    16   0  281m  15m 3932 R  3.5  0.2   0:09.00 httpd
15899 apache    16   0  277m  12m 4104 R  2.6  0.2   0:03.26 httpd
15701 apache    16   0  277m  12m 3920 R  2.3  0.2   0:08.35 httpd
15781 apache    15   0  274m 9.8m 3924 S  1.9  0.1   0:10.48 httpd
15848 apache    15   0  276m  11m 3876 S  1.9  0.1   0:06.63 httpd
15901 apache    15   0  275m  10m 3916 S  1.9  0.1   0:02.18 httpd
15879 apache    16   0  280m  16m 4104 R  1.3  0.2   0:02.03 httpd
15820 apache    16   0  281m  17m 5260 R  1.0  0.2   0:05.24 httpd

httpd.conf có liên quan:

Timeout 120
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

Ứng dụng của bạn là gì? PHP? Bạn đang sử dụng bộ đệm opcode như APC?
HTTP500

Vâng, PHP. Tôi có memcache và apc nhưng không sử dụng ngay bây giờ. Tôi đang xây dựng một máy chủ memcache riêng để tránh mất nó khi khởi động lại một nút.
Ryan

Có thể các quy trình apache của bạn đang chờ phản hồi từ MySQL và chồng chất. Bạn có phiền khi đăng my.conf của MySQL không? Ngoài ra, bạn có các bản ghi chậm được cấu hình trong MySQL không? Những gì nói với bạn, nếu bạn có chúng?
KM.

1
Bạn có làm việc với preforkhay workerkhông? Và bạn có phải đối mặt với những vấn đề như vậy sau khi phát hành mới, thay đổi mã, cập nhật máy chủ hoặc bất cứ điều gì tương tự không?
grosshat

Câu trả lời:


5

Có lẽ, một số tập lệnh PHP chạy trong mod_php tiêu tốn quá nhiều thời gian của CPU. Giới thiệu chung là chung và mỗi người trong số họ sẽ có một số lợi ích:

  • Cài đặt bộ đệm APC và kiểm tra xem nó có thực sự đang chạy không (APC đã đóng gói tệp apc.php hiển thị trạng thái APC và các lần truy cập và lỗi bộ nhớ cache)
  • Cài đặt nginx và cài đặt nó như một proxy ngược trước apache - nó sẽ giảm chi phí phục vụ các tệp tĩnh và để lại nhiều tài nguyên CPU hơn cho nội dung động của máy chủ
  • Thêm CustomLog vào apache với các chỉ thị% t% T và kiểm tra nhật ký - bạn sẽ thấy các yêu cầu wich đang chạy nhiều thời gian nhất, do đó tiêu tốn hầu hết CPU
  • tối ưu hóa / viết lại các tập lệnh

2
Vấn đề chắc chắn là một cái gì đó chạy trong quy trình Apache nhưng bản thân nó không phải là apache. Đây mod_phpthực sự là nguyên nhân rất có thể. Bạn cần lập hồ sơ các tập lệnh PHP mà bạn đang chạy và tìm hiểu xem chúng đang làm gì để lãng phí CPU. Tuy nhiên, đây không phải là cơ sở dữ liệu. Nếu cơ sở dữ liệu là cổ chai, bạn sẽ thấy rất nhiều quy trình Apache bị chặn chờ phản hồi từ cơ sở dữ liệu. Thực tế là các quy trình Apache / PHP ăn CPU có nghĩa là chúng không chờ IO (trừ khi bạn đang chạy các tập lệnh sử dụng IO chờ bận và không chặn IO, trong trường hợp đó bạn đã tìm ra nguyên nhân).
Mikko Rantalainen

bạn có thể hướng dẫn tôi về đề nghị thứ hai của bạn? Hướng dẫn nào?
sân gỗ
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.