Quy định server busy(overload) 2007-07-09 09:28:55


Khi site của bạn có số lượng truy cập tương đối lớn thì việc quá tải(overload) của server hoàn toàn có thể xảy ra,
ví dụ: giả sử server của bạn chỉ có thể xử lý được 1000 truy cập tại cùng 1 thời điểm, thì khi người thứ 1001 truy cập sẽ làm cho server bị overload(không truy cập được) để hạn chế tình trạng này ta có thể qui định giới hạn truy cập ví dụ n<1000 thì khi người truy cập thứ n+1 sẽ hiện ra câu thông báo: server busy, xin quay lại sau
cách thực hiện: chạy đoạn code này trước khi thực hiện các xử lý khác
<?php
function server_busy($numer){
if (
PHP_OS == 'Linux' AND @file_exists('/proc/loadavg') AND $filestuff = @file_get_contents('/proc/loadavg')){
$loadavg = explode(' ', $filestuff);
if (
trim($loadavg[0]) > $numer) {
print
'server busy,quay lại sau....';
exit(
0);
}
}
}
?>
* chỉ có thể thực hiện việc này cho server linux, các server windows không thực hiện được
Tác giả: TG

Tra loi 10 comment(s) NguyÅn Minh Tân 2007-07-09 09:28:55

Thanh Quang 2007-09-18 02:02:43

Bài viết này của TG rất hay, tuy nhiên mình cũng xin hỏi thêm một tí, mình dùng Apache làm webserver và dùng windows thì không biết có cách nào để kiểm soát overload không bạn ? Apache có hỗ trợ serverload cho mình không nhĩ ?
thanks!

Tra loi

TG 2007-09-18 02:05:16

Bạn để ý thư mục /proc/loadavg, thư mục này nằm trong Linux, Apache không kiểm soát được vấn đề này

Tra loi

Thanh Quang 2007-09-18 04:51:01

Vâng,cám ơn bài trả lời của TG, giờ nếu mình dùng Windows và dùng Apache vậy có cách nào để control overload của site không bạn ? Thông qua code của PHP chẵng hạn ? Nếu có thể trình bày phương pháp giúp mình được chứ ?

Tra loi

TG 2007-09-19 01:14:47

Cái này thì TG không rõ, nhưng theo TG nếu dùng PHP xử lý nhiều việc để kiểm tra bằng PHP thì càng làm cho server tăng overload thêm :D

Tra loi

vik 2009-05-27 02:55:05


Cho mình hỏi đoạn code trên tự động tính 1000 người truy cập hay sao mà mình ko thấy số 1000 đâu thể có thể thay đổi dc ?
<?php
function server_busy($numer){
if (
PHP_OS == 'Linux' AND @file_exists('/proc/loadavg') AND $filestuff = @file_get_contents('/proc/loadavg')){
$loadavg = explode(' ', $filestuff);
if (
trim($loadavg[0]) > $numer) {
print
'server busy,quay lại sau....';
exit(
0);
}
}
}
?>

Tra loi

cóc 2009-05-27 04:42:05


Là cái biến number đó
<?php
server_busy
(1000);
?>

Tra loi

cóc 2009-05-27 04:43:33

hay là mở cái file /proc/loadavg là thấy

Tra loi

Hao Nam 2009-06-16 05:23:35

có thể dùng cách này để chặn các truy cập "xấu" vào 1 link cố định ko các bác ui ? tui làm 1 site tin tức bị người ta get content hoài --> làm server lag .... Có cách nào chặn số lần request quá nhiều trong 1 thời điểm đến 1 link nào đó ko?
(ví dụ trong 1s request lên đến vài chục lượt vào link đó)

Tra loi

lamvnd@gmail.com 2010-03-02 08:11:02

define('_LOAD_LTD_', 5);

if (_LOAD_LTD_ > 0 && function_exists('sys_getloadavg')) {
$loadavg = sys_getloadavg();
if ($loadavg[0] > _LOAD_LTD_) {
echo '<h3>Server too busy !!! Please visit later</h3>';
exit();
}
}

Trong đó hàm sys_getloadavg() chỉ hỗ trợ với PHP 5 >= 5.1.3
Hàm sys_getloadavg() trả về mảng 3 phần tử, với phần tử thứ nhất là thống kê tải server trong một 1, phần tử thứ 2 là trong 5 phút, phần tử thứ 3 là trong 15 phút, thường chúng ta chỉ quan tâm đến phần tử đầu.

Cũng xin chú ý rằng với một con server bình thường loadavg trên 5 là ở mức cảnh báo, nên mức đề nghị mặc định là 5.

Tra loi

ndthuan 2010-03-05 05:08:26

Load mà tới 1000 khác gì đem xe tăng cán nát cái server :D

Load ở đây ko phải là số user online đồng thời mà là mức tải của CPU. Ta có cảm giác CPU xử lí tác vụ "cùng lúc" nhưng ko phải, nó chạy process này 1 chút và nhảy qua process khác... luân phiên như vậy. Nên cùng lúc chỉ có x process được thực thi (x = số nhân của CPU).

Nếu server có 4 nhân thì mức tải lí tưởng là 4 trở xuống, còn trên 4 bắt đầu là quá tải. Tuy nhiên theo kinh nghiệm của mình thì từ trên 4 tới 6 vẫn trong dạng chịu đựng được, vẫn chống đỡ được. Còn thường xuyên trên 6 thì nên nghĩ đến việc mua thêm CPU. CPU càng mạnh thì giải quyết process càng nhanh và giảm thời gian chờ của các process khác.

Tra loi

Y kien