Chia Sẽ Kinh Nghiệm Về IT



Tìm Kiếm Với Google
-


Gởi Ðề Tài Mới  Gửi trả lời
 
Công Cụ Xếp Bài
Tuổi 09-07-2009, 09:25 AM   #1
hoctinhoc
Guest
 
Trả Lời: n/a
how to configure Apache high performance
how to configure Apache high performance Hiệu suất của máy chủ chạy Apache có thể được cải thiện bằng cách thêm vào phần cứng như RAM hay CPU tốc độ cao hơn. Tuy nhiên, một cách đơn giản, việc này hoàn toàn có thể đạt được nhờ việc tùy chỉnh các thông số cấu hình của apache. Các thông số này sẽ tác động vào các yếu tố như “thời gian dịch” (complie-time) và “thời gian chạy” (run-time) của apache (run-time của apache giả thiết rằng Apache được biên dịch qua các module đa tiến trình MPM (MPM: Multi Processing Modules), các phương pháp nén và đệm bộ nhớ (cache), các tổ chức các server khác nhau phân chia theo đối tượng phục vụ như máy chủ phục vụ các file statics, hoặc dữ liệu động, v.v...

1. Các option về cấu hình thời gian biên dịch (Compile-Time Configuration Options)

a. Chỉ load nhưng module cần thiết (Load only the required modules)

Apache HTTP server là một chương trình được xây dựng theo các module để cho người quản trị, bằng cách lựa chọn module, có thể sử dụng được các tính năng riêng biệt như mong muốn. Các module này có thể được dịch cố định trong các httpd binary hoặc có thể dịch theo các Dynamic Shared Objects (DSOs). Chỉ nên chạy apache với các module nào thật sự cần thiết để tiết kiệm bộ nhớ và theo đó tăng hiệu suất sử dụng cho apache.

Dynamic Shared Objects là phương pháp hỗ trợ cho việc load các module riêng biệt với các module được dịch sẵn trong khi cài đặt apache. DSO cũng có thể dùng cho việc thêm vào các module riêng lẻ này ngay trong quá trình cải đặt hoặc sau đó. DSO dùng mod_so (bắt buộc phải được dịch sẵn khi cài apache)và việc thêm vào các module được thực hiện nhờ các lệnh LoadModule hoặc a2enmod (ver 2.2).(Sau khi thực hiện, yêu cầu phải reload dịch vụ)

ví dụ:
Code:
#Listen 12.34.56.78:80

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
b. Lựa chọn MPM thích hợp

MPM – Multi Processing Modules trong apache có nhiệm vụ chính là điều chỉnh các tiến trình con để xử lý các request. Dù là trong thời điểm nào cũng chỉ có một MPM được load trong server mà thôi.

Việc lựa chọn chính xác một MPM cho server phụ thuộc vào nhiều yếu tố như support của hệ điều hành, bộ nhớ, tính linh động hay ổn định trong yêu cầu xử lý… Hệ thống linux có thể sử dụng 2 loại MPM: worker và prefork. Điểm lưu ý đầu tiên là MPM có khả năng tự điều chỉnh rất tốt, các thông số mặc định đã được đánh giá kỹ qua thực nghiệm và do đó, hầu như không cần phải thay đổi chúng trừ những trường hợp đặc biệt.

Việc lựa chọn này được quyết định phụ thuộc theo nhu cầu đặc thù của công việc mà máy chủ apache đảm nhận, một vài so sánh sau sẽ giúp người sử dụng có thể cân nhắc kỹ hơn trong quá trình lựa chọn:


Nguyên tắc hoạt động
+ MPM worker: Chia quá trình xử lý ra thành các child process, mỗi child process lại phân ra thành các thread, mối thread này là đối tượng trực tiếp xử lý các request
+ MPM prefork: Chia quá trình xử lý ra thành các child process, các child process này không được chia nhỏ ra hơn nữa mà trực tiếp xử lý các request

Khả năng xử lý đồng thời:
+worker: Tốt, do được phân thành nhiều thread / child process / main process --> có khả năng xử lý nhiều request cùng lúc +prefork: Xử lý được ít các request đồng thời hơn. Nếu số request > số child process, thì số request chưa được xử lý phải đợi cho tới khi có child process nào rỗi thì mới được xử lý --> trễ

Tốc độ xử lý request
+prefork:Nhanh hơn worker vì child process đương nhiên luôn mạnh hơn thread. (thread là..con của child)
Độ ổn định:
+worker: Một child processs die kéo theo tất cả các thread trong một process đều die ---> rất nhiều request bị die
+prefork: Một childproess die thì chỉ làm cho một request ko được đáp ứng mà thôi

Tải
+ prefork thực thi request = child process nên sẽ tốn bộ nhớ hơn worker cho việc cùng phục một một lượng request bằng nhau


Có thể tham khảo thêm tại:

worker - Apache HTTP Server
prefork - Apache HTTP Server

2. Các tùy chỉnh cấu hình thời gian chạy
DNS lookup

Lệnh HostnameLookups cho phép DNS tìm kiếm bản ghi để có thể sử dụng hostname thay vì địa chỉ IP trong apache. Điều này tạo ra một độ trễ cho mỗi request tới server. (vì phải chờ cho quá trình DNS kết thúc để có thể sử dụng hostname cho các phần tiếp theo). Do đó, nếu không cần thiết, hãy luôn để HostnameLookups ở chế độ Off. Khi sử dụng các lệnh Allow from hay Deny from, tại hạ khuyến cáo nên dùng địa chỉ IP thay vì domain name. Vì đôi khi, để chống DNS spoofing, DNS lookup sẽ kiểm tra cả 2 bản ghi DNS thuận và ngược, như thế thì….tongue.gif

AllowOverride

Khi lệnh AllowOverride không được set là ‘None’, Apache sẽ mở tất cả các file .htacces trên mỗi thư mục mà nó đi qua (theo yêu cầu về đối tượng của request)
Ví dụ:
CODE
DocumentRoot /var/www/html
<Directory />
AllowOverride all
</Directory>


Nếu có một request là /index.htm tới, Apache sẽ tiến hành thử tìm và mở file .htaccess ở tất cả các cấp thư mục như sau:

CODE
/.htaccess
/var/.htaccess
/var/www/.htaccess
/var/www/html/.htaccess


Điều này sẽ thêm vào việc xử lý một quá trình tìm kiếm file và do đó sẽ tạo ra độ trễ. Do đó, chỉ nên “thả cửa” cho file .htaccess trong những thư mục riêng biệt thật sự cần thiết, sử dụng

CODE
<Directory “Đường dẫn thư mục”>
AllowOverride all
</Directory>


FollowSymLinks and SymLinksIfOwnerMatch

Nếu tùy chọn FollowSymLink không được thiết lập hoặc SymLinksIfOwnerMatch được thiết lập, Apache sẽ phải sử dụng thêm các hàm hệ thống để kiểm tra xem các file yêu cầu có phù hợp với các file có trong thư mục hay không. Ví dụ:

CODE
DocumentRoot /vaw/www/html
<Directory />
Options SymLinksIfOwnerMatch
</Directory>


Với một request yêu cầu như sau: /index.html , apache sẽ thi hành hàm lstat() trong
/var, /var/www, /var/www/html, /var/www/html/index.html

Các lời gọi hàm hệ thống này ở các cấp thư mục sẽ tạo ra một độ trễ nhất định. Các kết quả của lời gọi hàm lstat không được cache lại do đó hiện tượng này sẽ xảy ra đối với mọi request. Để đạt được hiệu suất cao nhất cho Apache, luôn thiết lập FollowSymLinks ở mọi thư mục và không bao giờ thiết lập SymLinksIfOwnerMatch hoặc chỉ thiêt lập ở những thư mục cần thiết. Ví dụ:


CODE
DocumentRoot /www/htdocs
<Directory />
Options FollowSymLinks
</Directory>

<Directory /www/htdocs>
Options -FollowSymLinks +SymLinksIfOwnerMatch
</Directory>




MaxClients

MaxClients giới hạn số request đồng thời tối đa mà server có thể thực thi. Giá trị hợp lý của MaxClients có thể được tính theo công thức :

(Tổng số dung lượng RAM dành cho webserver ) / giá trị child process size lớn nhất

Trong đó: đối với một đối tượng tĩnh , child process size khoảng 2-3Mb, đối tượng động khoảng 15Mb.

MinSpareServers, MaxSpareServers, and StartServers

StartServers xác định số child process được tạo ra khi khởi động. MaxSpareServers và MinSpareServers xác định số child processes được duy trì trong khi chờ các request. Nếu số MinspareServers quá thấp, Apache sẽ phải tạo thêm các child process khi có request đến. Việc tạo thêm các child process này sẽ gây ra trễ vì khi tạo các child process, server sẽ không đáp ứng được các request ngay lập tức. Mặc khác, MaxSpareServers cũng không nên đó quá cao, tránh gây tốn tài nguyên phần cứng vô ích, khi luôn “dự trữ ” một phần bộ nhớ mà hầu như không bao giờ dùng tới.

MaxRequestsPerChild

MaxRequestsPerChild giới hạn số request có thể thực hiện bởi một chid process riêng lẻ. Sau khi đủ số lượng request được thiết lập bởi giá trị MaxRequestsPerChild, child process sẽ die. Mặc định, nó được đặt là 0, có nghĩa là các child process sẽ không bao giờ bị “hết hạn sử dụng”. Chúng ta có thể thiết lập giá trị này khoảng vài nghìn request.

KeepAlive and KeepAliveTimeout

Lệnh KeepAlive cho phép nhiều request có thể gửi liên tiếp tới server trong cùng một kết nối TCP. Điều này đặc biệt hữu dụng cho với các đối tượng là các trang HTML với rất nhiều ảnh trong đó. Nếu KeepAlive đặt là Off (bị tắt) thì với mỗi một ảnh thành phần lại phải tạo một kết nối TCP riêng --> Gây trễ.

KeepAliveTimeout xác đinh khoảng thời gian chờ đợi cho request tiếp theo. Chỉ nên set giá trị này thấp, khoảng 4 hay 5 giây. Nếu set quá cao, child process bắt buộc phải chờ đợi một client trong khi nó hoàn toàn có thể được sử dụng để phục vụ một client khác ---> lãng phí.


Ngoài cách tinh chỉnh các tùy chọn trong file cấu hình như trên, chúng ta có thể sử dụng các mod_cache hay mod_deflate để làm giảm lưu lượng mạng cho Webserver. Với lệnh a2enmod, việc bật 2 mod trên là hoàn toàn đơn giản.

hackingart.com

Apache Webserver Performance tuning
Optimizing Apache Server Performance
Apache high performance - Fotech Network Club
  Trả lời ngay kèm theo trích dẫn này
Gửi trả lời



Quyền Hạn Của Bạn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Hình Cảm xúc đang Mở
[IMG] đang Mở
Mã HTML đang Tắt




Bây giờ là 10:39 AM. Giờ GMT +7



Diễn đàn tin học QuantriNet
quantrinet.com | quantrimang.co.cc
Founded by Trương Văn Phương | Developed by QuantriNet's members.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.