MaxClents trong apache. Làm thế nào để biết kích thước của công ty của tôi?


9

Từ http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

Vấn đề phần cứng lớn nhất ảnh hưởng đến hiệu suất máy chủ web là RAM. Một máy chủ web không bao giờ phải trao đổi, vì việc hoán đổi làm tăng độ trễ của mỗi yêu cầu vượt quá điểm mà người dùng cho là "đủ nhanh". Điều này khiến người dùng nhấn dừng và tải lại, tăng thêm tải. Bạn có thể và nên kiểm soát cài đặt MaxCl Client để máy chủ của bạn không sinh ra nhiều trẻ em bắt đầu hoán đổi. Quy trình này để thực hiện việc này rất đơn giản: xác định kích thước của quy trình Apache trung bình của bạn, bằng cách xem danh sách quy trình của bạn thông qua một công cụ như trên cùng và chia phần này vào tổng bộ nhớ khả dụng của bạn, để lại một khoảng trống cho các quy trình khác.

Vấn đề chính là tôi không thể hiểu làm thế nào để biết kích thước, bởi vì, tôi cũng có kích thước của httpd không quá 3888

Nhưng, nếu chúng ta cần xác định số lượng cho MaxClents và tôi có 4GB RAM, vậy tôi nhận được: 972, vậy tôi có nên sử dụng như 900 trong MaxClents không?


4
"tôi có kích thước của httpd không quá 3888" - Tôi nghĩ rằng tôi nói cho mọi người khi tôi nói, "HUH?"
womble

Câu trả lời:


9

Đầu tiên, xác định PID của một trong các quy trình Apache của bạn.

Sau đó, bạn có thể làm một cái gì đó như thế này:

cat /proc/PIDHERE/status | grep VmRSS

Điều này sẽ mang lại kích thước tập hợp cư trú (hiện tại) của quy trình cụ thể đó, tương tự như:

VmRSS: 304456 kB

Giá trị này là như âm thanh của nó, nó là kích thước của cư dân quá trình trong RAM.

Sau đó bình thường hóa đơn vị đo của bạn ( 4GB * 1024 * 1024 = 4,194,304 KB). Chia:

4194304 KB / 304456 KB = 13.77 processes

Hãy xem xét rằng bạn có thể có các quy trình khác đang chạy trên hệ thống của mình cũng sẽ tiêu thụ bộ nhớ và lý tưởng là bạn muốn giảm thiểu việc hoán đổi, do đó bạn sẽ không muốn 13 Max Max Client được cấu hình (sử dụng số của tôi), bạn muốn ít hơn một chút (theo ý của bạn ).

Đây là một ước tính thô; kích thước của các quy trình Apache của bạn có thể tăng theo thời gian tùy thuộc vào tải.


1
Mặc dù RSS không bao gồm các trang được chia sẻ, nhưng nó bao gồm các trang được gắn cờ là sao chép khi ghi - tức là có không gian trên máy cho nhiều quy trình hơn (tổng rss) / (bộ nhớ vật lý). Xem thêm câu trả lời của tôi ở nơi khác - không gian trống là điều cần thiết để thực hiện tốt.
symcbean

4

Dự đoán maxCl Client từ các kịch bản thử nghiệm là điểm khởi đầu - nhưng để giải quyết vấn đề chính xác, bạn cần bắt đầu đo lường cách ứng dụng của bạn hoạt động với lưu lượng truy cập thực.

Giả sử apache của bạn đang chạy pre-fork ....

Thiết lập công việc định kỳ để đếm số lượng tiến trình httpd và đầu ra 'miễn phí'. Lưu ý rằng nếu máy chủ web của bạn đang phục vụ bất kỳ nội dung nào từ các tệp cục bộ (và trong nhiều trường hợp, ngay cả khi không phải), dung lượng bộ nhớ có sẵn cho bộ đệm / bộ đệm sẽ ảnh hưởng lớn đến hiệu suất. tức là nếu bạn đạt đến điểm hoán đổi, hiệu suất web của bạn có thể là khủng khiếp!

Khi bạn đã có một số dữ liệu, hãy vẽ nó trên biểu đồ và thực hiện hồi quy bình phương nhỏ nhất trên nó - ngoại suy để tìm số lượng khách hàng mà bạn đạt đến giới hạn mục tiêu cho việc sử dụng bộ nhớ httpd. Điểm bắt đầu cho mục tiêu bộ nhớ sẽ nhỏ hơn 80% bộ nhớ vật lý / 80% kích thước của nội dung.

(lưu ý nếu bạn đã đặt MinSpareServers thành giá trị rất cao, kết quả có thể không chính xác)

#!/bin/bash

LOGFILE='/var/log/httpd/memusage'
PIDS = `ps -ef | grep httpd | grep -v grep | wc -l`
MEM = `free | grep 'buffers/cache'`
DAY = `date '%Y-%m-%d %H:%M:%S'`
echo ${DAY} ${PIDS} ${MEM} >>LOGFILE

Trong một thế giới lý tưởng, bạn cũng sẽ đo thời gian phản hồi URL trong cùng một tệp nhật ký - nhưng điều đó trở nên phức tạp hơn rất nhiều.


Đối với tôi, bộ đệm / bộ đệm thay đổi rất ít cho dù đang chạy 11 máy khách hay khi máy chủ đã đạt 86 hoặc 151 máy khách (và máy chủ đã bị sập). Bạn mong đợi thấy gì trong biến MEM của bạn? Tôi nhận được hai số, vì vậy tự hỏi nếu Ubuntu 12.04 đang cung cấp một cái gì đó ngoài bạn mong đợi.
PeterB

Hãy thử chạy 'miễn phí' và bạn sẽ thấy những gì tôi mong đợi (2 số). Nếu đúng là có ít biến thể trong các số này với số lượng quy trình khác nhau thì bạn đang chạy máy chủ dựa trên sự kiện hoặc cài đặt maxspareservers của bạn là ngớ ngẩn. Nếu bạn đã đăng một mẫu đầu ra và các phần có liên quan của httpd.conf thì có lẽ chúng ta sẽ có một bức tranh tốt hơn?
symcbean

.... và "tai nạn"? Tai nạn gì?
symcbean

Xin lỗi, xem pastebin.com/aHZCagVn để biết các cài đặt httpd.conf và đầu ra mẫu. Bởi 'sự cố' Tôi có nghĩa là quá nhiều khách hàng, máy chủ hết bộ nhớ và bị khóa. Vui lòng xem pastebin.com/fnXzBfQL để biết thêm.
PeterB

1
@PeterB có vẻ như nhiều khả năng MySQLd đang gây ra vấn đề này. Khi kẻ giết người OOM của hạt nhân giết chết những kẻ phạm tội tồi tệ nhất trước tiên dựa trên giá trị của / Proc / PID / oom_score_adj. Bằng chứng là trong đầu ra của bạn, mysqld đã đi đầu tiên. Bạn có thể cần điều chỉnh các cài đặt trong my.cnf một cách phù hợp hơn để phù hợp với các ràng buộc của VM. Như một / tạm thời / cách giải quyết, chỉ để xem liệu bạn có thể tránh được cú đá của kẻ giết người OOM hay không, hãy thử thêm một tệp hoán đổi cho bộ nhớ ảo bổ sung; sau đó loại bỏ nó một khi bạn đã xác định được vấn đề thực sự của mình.
loopForver
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.