Hạn chế sử dụng bộ nhớ Apache 2


9

Tôi đang chạy một máy chủ web sở thích từ một chiếc Blue & White G3 / 300 cổ xưa đang chạy Debian PPC Squeeze 2.6.30. Hiệu suất vẫn ổn trong một thời gian sau khi khởi động lại, nhưng cuối cùng nó ngày càng bị sa lầy. Ngay bây giờ là lúc 76 ngày hoạt động, và thủ phạm chính dường như là việc sử dụng bộ nhớ của hơn 10 quá trình apache2.

Tôi nghĩ rằng tôi cần hạ thấp các giá trị cho StartServers, MinSpareServersvà / hoặc MaxSpareServers, nhưng tôi không chắc nên điều chỉnh cái nào và có ba phần cho mỗi phần tùy thuộc vào mô-đun mpm nào được sử dụng.

Làm cách nào để biết phần nào sau đây tôi cần thay đổi, và một số giá trị hợp lý được đưa ra là hộp có bộ nhớ vật lý 448 MB (lịch sử nâng cấp kỳ lạ của từng thanh 64, 128 và 256)?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

Không có bất kỳ phiên bản StartServers nào khác trong apache2.conf của tôi, nhưng không có mô-đun mpm nào xuất hiện trong mods-availablehoặc mods-enabled. Ý tưởng?

Cảm ơn!


Tôi đã giả định rằng hộp của bạn sắp hết bộ nhớ (và hiệu suất tệ hại của bạn đến từ việc hoán đổi rất nhiều). Nếu bạn không trao đổi, tôi sẽ thông báo cho bạn để biết thêm chi tiết :-)
voretaq7

Câu trả lời:


6

400 MB không phải là nhiều cho một máy chủ web ngày nay - bạn có thể muốn xem xét thay thế hộp :)

Điều đó nói rằng, nếu việc sử dụng bộ nhớ của bạn đang phình to, bạn có thể bị rò rỉ bộ nhớ ở đâu đó - để xem thử nhanh kích thước của các quy trình httpd, sau đó dừng / khởi động Apache và xem liệu chúng có nhỏ hơn nhiều không. Nếu họ đang xem chúng trong một vài ngày và xem nếu chúng phát triển.

Nếu đó là rò rỉ bộ nhớ, giải pháp thực sự cho việc đó là tìm và khắc phục rò rỉ bộ nhớ, nhưng vì đó thường là một nỗi đau ở mông, bạn cũng có thể điều chỉnh MaxRequestsPerChildthành một thứ khác 0 (không giới hạn). Điều này sẽ giết chết các công nhân Apache khi họ đã phục vụ một số lượng yêu cầu cố định (buộc họ phải từ bỏ bộ nhớ bị rò rỉ trong quá trình này.

Bắt đầu với các giá trị lớn hơn (trong hàng ngàn hoặc hơn) và làm việc theo cách của bạn xuống hàng trăm. Nếu bạn nhận được dưới 100 yêu cầu cho mỗi đứa trẻ, rò rỉ bộ nhớ của bạn đủ lớn để đảm bảo thực sự sửa nó vì hiệu suất đạt được từ việc liên tục giết chết và tái sản xuất nhân viên apache sẽ rất đáng kể.


Re: mà mpm để điều chỉnh, câu trả lời là gần như chắc chắn prefork.
Bạn có thể chạy httpd -Vvà tìm Server MPM:dòng chắc chắn sẽ cho bạn biết.


1
-V đưa cho tôi thông tin prefork tôi cần (mặc dù đó là apache2 -V trong trường hợp của tôi). Cảm ơn!
UltraNurd

Có vẻ như đã thực hiện các mẹo. Tôi nghĩ vấn đề là tôi đã hết bộ nhớ vật lý và hoán đổi vì có quá nhiều máy chủ con đã hoạt động (mỗi máy chiếm khoảng 80 MB). Và vâng, tôi biết, máy chủ đã cũ. Nhưng nó hầu như không xử lý bất kỳ yêu cầu nào: oD.
UltraNurd

1
Nếu bạn không xử lý nhiều yêu cầu, bạn cũng có thể cắt số lượng máy chủ Start & tùng như bạn đã đề cập trong bài đăng gốc của mình (trên các hệ thống phát triển, tôi đặt tất cả chúng thành thứ gì đó trong khoảng từ 2 đến 5 để giảm mức sử dụng RAM)
voretaq7

Cuối cùng tôi đã giảm các phụ tùng tối thiểu và tối đa xuống còn 3 và 6 từ 5 và 10, và điều đó dường như để lại đủ RAM còn lại để giữ mọi thứ không bị tráo đổi. Cảm ơn!
UltraNurd

1

Để giảm bớt việc sử dụng bộ nhớ của quá trình apache, bạn sẽ muốn điều chỉnh MaxClents.

Nguyên tắc chung là: (Bộ nhớ tối đa mong muốn) / (Sử dụng bộ nhớ của 1 Quá trình Apache) = # Khách hàng tối đa

Cuối cùng, bạn cũng cần điều chỉnh để trở thành MaxSpareServers <= Max Client .

Việc sử dụng bộ nhớ của một tiến trình phụ thuộc rất nhiều vào các mô-đun bạn đã tải (php, v.v.) vì vậy bạn có thể muốn đặt Khách hàng Tối đa thấp hơn một chút.

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.