2013-06-07 28 views
7

Dường như chúng tôi có thể có vấn đề bộ nhớ (đang phát triển) trong httpd apache của chúng tôi ở đâu đó.apache httpd sử dụng hết mem cho đến khi treo

pic nhanh: http://screencast.com/t/NGAzarD87O

Chú ý rằng nó được chạy tốt trên các máy chủ gốc (vật lý) trong một thời gian. Bây giờ trên máy ảo mới (với bộ nhớ nhiều hơn và CPU), nó chạy nhưng từ từ ăn đi tại mem/hoán đổi cho đến khi hệ thống treo.

Nếu tôi khởi động lại httpd, mem sẽ nhảy lùi lại (nếu chúng tôi bắt được).

httpd.x86_64       2.2.3-76.el5_9   installed 
PHP 5.1.6 (cli) (built: Jun 22 2012 06:20:25) 
MySQL Server version: 5.0.95 

Tôi không nghĩ nó có thể là bất kỳ tập lệnh nào chạy/etc khi chúng chạy tốt trong nhiều năm trên máy vật lý. Chúng tôi đã cố gắng để phù hợp với tất cả các cấu hình (http, php, vv) trên máy mới nhưng không thể tìm ra lý do tại sao httpd tiếp tục phát triển.

$ ps -ylC httpd --sort:rss 
S UID PID PPID C PRI NI RSS SZ WCHAN TTY   TIME CMD 
S  0 13814  1 0 78 0 29208 68382 -  ?  00:00:00 httpd 
S 48 20854 13814 0 76 0 34876 70930 semtim ?  00:00:00 httpd 
S 48 20853 13814 0 75 0 36592 71387 semtim ?  00:00:00 httpd 
S 48 13822 13814 0 75 0 36780 71430 semtim ?  00:00:00 httpd 
S 48 20696 13814 0 75 0 37092 71520 semtim ?  00:00:00 httpd 
S 48 13821 13814 0 75 0 37184 71529 semtim ?  00:00:01 httpd 
S 48 13820 13814 0 75 0 37220 71527 -  ?  00:00:01 httpd 
S 48 13824 13814 0 75 0 37236 71513 semtim ?  00:00:01 httpd 
S 48 13818 13814 0 75 0 37636 71547 semtim ?  00:00:01 httpd 
S 48 13819 13814 0 75 0 37636 71617 semtim ?  00:00:01 httpd 
S 48 13823 13814 0 75 0 37888 71689 semtim ?  00:00:01 httpd 
S 48 13825 13814 0 75 0 37900 71676 semtim ?  00:00:01 httpd 

UPDATE: khi viết câu hỏi này ra (có thể 10-15 phút) Tôi reran trên và RSS đều ngồi ở ~ 51.072 thay vì ở trên tại ~ 37000

Dưới đây là một hoạt động từ các cài đặt mem python program

Private + Shared = RAM used  Program 
.... SNIPPED OUT .... 
208.0 MiB + 25.5 MiB = 233.5 MiB  httpd (12) 
--------------------------------- 
         477.1 MiB 

PHP:

max_execution_time = 30 
max_input_time = 60 
memory_limit = 152M 

Modules:

$ apachectl -M 
httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.2 for ServerName 
Loaded Modules: 
core_module (static) 
mpm_prefork_module (static) 
http_module (static) 
so_module (static) 
auth_basic_module (shared) 
auth_digest_module (shared) 
authn_file_module (shared) 
authn_alias_module (shared) 
authn_anon_module (shared) 
authn_dbm_module (shared) 
authn_default_module (shared) 
authz_host_module (shared) 
authz_user_module (shared) 
authz_owner_module (shared) 
authz_groupfile_module (shared) 
authz_dbm_module (shared) 
authz_default_module (shared) 
ldap_module (shared) 
authnz_ldap_module (shared) 
include_module (shared) 
log_config_module (shared) 
logio_module (shared) 
env_module (shared) 
ext_filter_module (shared) 
mime_magic_module (shared) 
expires_module (shared) 
deflate_module (shared) 
headers_module (shared) 
usertrack_module (shared) 
setenvif_module (shared) 
mime_module (shared) 
dav_module (shared) 
status_module (shared) 
autoindex_module (shared) 
info_module (shared) 
dav_fs_module (shared) 
vhost_alias_module (shared) 
negotiation_module (shared) 
dir_module (shared) 
actions_module (shared) 
speling_module (shared) 
userdir_module (shared) 
alias_module (shared) 
rewrite_module (shared) 
proxy_module (shared) 
proxy_balancer_module (shared) 
proxy_ftp_module (shared) 
proxy_http_module (shared) 
proxy_connect_module (shared) 
cache_module (shared) 
suexec_module (shared) 
disk_cache_module (shared) 
file_cache_module (shared) 
mem_cache_module (shared) 
cgi_module (shared) 
version_module (shared) 
perl_module (shared) 
php5_module (shared) 
proxy_ajp_module (shared) 
python_module (shared) 
ssl_module (shared) 
Syntax OK 

thiết lập httpd.conf:

IfModule prefork.c> ignore format on these tags 
StartServers  8 
MinSpareServers 5 
MaxSpareServers 20 
ServerLimit  256 
MaxClients  256 
MaxRequestsPerChild 4000 

# worker MPM 
StartServers   2 
MaxClients   150 
MinSpareThreads  25 
MaxSpareThreads  75 
ThreadsPerChild  25 
MaxRequestsPerChild 0 

Sử dụng chương trình tại https://code.google.com/p/check-httpd-limits/wiki/Documentation Tôi đã nhận:

 
Check Apache Httpd MPM Config Limits (Version 2.4) 
by Jean-Sebastien Morisset - http://surniaulula.com/ 

Httpd Binary 

- CONFIG    : /etc/httpd/conf/httpd.conf 
- EXE     : /usr/sbin/httpd 
- MPM     : prefork 
- ROOT     : /etc/httpd 
- VERSION    : 2.2 

Httpd Processes 

- PID 10860 (httpd)  : 106.93 MB/ 3.95 MB shared 
- PID 13814 (httpd)  : 28.52 MB/ 6.36 MB shared [excluded from averages] 
- PID 13818 (httpd)  : 180.28 MB/ 4.29 MB shared 
- PID 13819 (httpd)  : 182.67 MB/ 4.04 MB shared 
- PID 13820 (httpd)  : 182.45 MB/ 4.08 MB shared 
- PID 13821 (httpd)  : 185.53 MB/ 4.04 MB shared 
- PID 13822 (httpd)  : 176.12 MB/ 4.36 MB shared 
- PID 13823 (httpd)  : 180.05 MB/ 4.04 MB shared 
- PID 13824 (httpd)  : 182.21 MB/ 4.05 MB shared 
- PID 13825 (httpd)  : 179.36 MB/ 4.04 MB shared 
- PID 20696 (httpd)  : 180.10 MB/ 4.04 MB shared 
- PID 20853 (httpd)  : 180.39 MB/ 4.03 MB shared 
- PID 20854 (httpd)  : 180.79 MB/ 4.04 MB shared 
- PID 21003 (httpd)  : 159.77 MB/ 4.05 MB shared 

- HttpdRealAvg   : 166.09 MB [excludes shared] 
- HttpdSharedAvg  : 4.05 MB 
- HttpdRealTot   : 2225.76 MB [excludes shared] 
- HttpdRunning   :  14 

Httpd Config 

- StartServers   : 8 
- ServerLimit   : 256 
- MinSpareServers  : 5 
- MaxSpareServers  : 20 
- MaxRequestsPerChild : 4000 
- MaxClients   : 256 

Server Memory 

- Cached    : 671.46 MB 
- MemFree    : 547.88 MB 
- MemTotal    : 3819.89 MB 
- SwapFree    : 5951.89 MB 
- SwapTotal    : 5951.99 MB 

Calculations Summary 

- OtherProcsMem   : 370.74 MB (MemTotal - Cached - MemFree - HttpdRealTot - HttpdSharedAvg) 
- FreeMemNoHttpd  : 3449.15 MB (MemFree + Cached + HttpdRealTot + HttpdSharedAvg) 
- MaxLimitHttpdMem  : 42523.09 MB (HttpdRealAvg * MaxClients + HttpdSharedAvg) 
- AllProcsTotalMem  : 42893.83 MB (OtherProcsMem + MaxLimitHttpdMem) 

Maximum Values for MemTotal (3819.89 MB) 

    
     StartServers    8 # (no change) Default is 5 
     ServerLimit    21 # (256 -> 21) MaxClients 
     MinSpareServers   5 # (no change) Default is 5 
     MaxSpareServers   20 # (no change) Default is 10 
     MaxRequestsPerChild  4000 # (no change) Default is 10000 
     MaxClients    21 # (256 -> 21) (MemFree + Cached + HttpdRealTot + HttpdSharedAvg)/HttpdRealAvg 
    

Result 

ERROR: AllProcsTotalMem (42893.83 MB) exceeds MemTotal (3819.89 MB) and free swap (5951.89 MB) by 33122.05 MB. 

+1

Không chắc chắn nếu nó sẽ giúp, nhưng bạn có thể thử vô hiệu hóa một số mô-đun bạn không cần. Chúng cũng là mối nguy hiểm về an ninh tiềm ẩn. Ví dụ: bạn có thực sự muốn tự động lập chỉ mục không? –

+0

bất kỳ đề xuất nào về nơi bắt đầu? Một lần nữa, đây là những mô-đun tương tự được tải trên máy chủ cũ. Cấp cài đặt mới này có thể đã bị hỏng mô-đun tôi đoán. – Douglas

+0

Những gì tôi đã làm với máy chủ của tôi là các mô-đun bị hủy bỏ cho đến khi một số lỗi hoặc bị gián đoạn đã ném một lỗi khi khởi động. Nếu bạn không muốn đi qua điều này, một số tốt để loại bỏ là autoindex, bí danh, proxy_ *, cgi, perl, php, python (trừ khi bạn đang sử dụng ngôn ngữ). Ngoài ra, bạn đã xác nhận rằng máy chủ của bạn không chỉ hoạt động? Thiết lập nhật ký truy cập và kiểm tra nhật ký lỗi nếu bạn chưa đăng nhập. –

Trả lời

1

Có thể có bất kỳ số lý do Apache có thể kéo dài quá nhiều bộ nhớ. Mặc dù không có "câu trả lời" phổ biến nhưng có danh sách gỡ rối:

  1. Cài đặt lại Apache và tất cả các mô-đun.
  2. Vô hiệu hóa tất cả các mô-đun bạn không cần. Ngoài khả năng sử dụng thêm tài nguyên, đây cũng có thể là mối nguy hiểm về bảo mật.
    1. mod_autoindex sẽ cho phép mọi người xem tất cả các tệp trong bất kỳ mục nào trong thư mục public_html của bạn miễn là không có chỉ mục. * Trong thư mục đó.
    2. mod_alias will sẽ không chỉ tiết lộ rằng bạn đang chạy Apache, nhưng cũng sẽ là một chỉ báo tốt mà bạn chưa xóa các mô-đun bổ sung và sẽ làm cho bạn có nhiều khả năng nhắm mục tiêu hơn.
    3. Xóa tất cả proxy modules trừ khi bạn đang thực sự sử dụng chúng.
    4. Xóa tất cả mod_cgi, mod_php, v.v mà bạn không cần. Bạn càng cho phép Apache thực thi nhiều loại tệp, càng có nhiều cách để một người độc hại trở nên ác ý.
  3. Kiểm tra server configurations của bạn.Đừng ngại nghiên cứu những chỉ thị nào đó làm và đừng sợ tạo bản sao lưu của apache.conf và thay đổi một vài thứ. Trường hợp xấu nhất là Apache sẽ không khởi động được, hoặc Apache sẽ gặp sự cố.
1

Đôi khi phân bổ quá nhiều bộ nhớ sẽ tạo ra sự cố bộ nhớ. Trừ khi có một lý do cụ thể để phân bổ 152M cho PHP, đó là cao. Thả xuống 32M hoặc 64M. Nếu một tập lệnh cụ thể được yêu cầu nhiều hơn, hãy bật tập lệnh đó cho tập lệnh đó.

Tiếp theo, hãy kiểm tra phân bổ cơ sở dữ liệu của bạn. Thường bộ nhớ là điều đầu tiên mọi người phân bổ để làm cho một cái gì đó chạy nhanh hơn khi có các mục khác cần được thực hiện (như điều chỉnh truy vấn).

Về cơ bản, phân bổ quá nhiều tạo bản sao lưu thông tin cho I/O. Nghe có vẻ ngược lại, tôi biết. Tôi đã có một vấn đề tương tự và nó đã được phân bổ tài nguyên. Thả tài nguyên của bạn về giá trị mặc định của chúng và xem liệu điều này có làm thay đổi mức sử dụng bộ nhớ không. Điều chỉnh từ đó để tìm các cài đặt tốt nhất.

Các vấn đề liên quan