統(tǒng)計所有進程占用的物理內(nèi)存
ps -eo pid,rss,pmem,pcpu,vsz,args --sort=rss
基于nginx的請求頻率限制睁壁。
一背苦、配置文件
#限速互捌,每秒10個,內(nèi)存區(qū)域10m,大概16萬個session
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server
{
listen 80;
server_name xxx.xxx.xxx;
location / {
#緩存區(qū)隊列burst=100個,不延期行剂,即每秒最多可處理rate+burst個.同時處理rate個疫剃。
limit_req zone=one burst=100 nodelay;
proxy_pass http://service;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_intercept_errors on;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 120; #長時操作的設(shè)置
}
}
二、參數(shù)詳解
2.1 limit_req_zone的參數(shù)
zone:one:10m 表示一個內(nèi)存區(qū)域大小為10m,并且設(shè)定了名稱為one.
rate=5r/s 表示請求的速率是1秒5個請求硼讽,當單位設(shè)置成60r/m時巢价,并不能達到限速1分鐘60次的效果寄猩,它等同于1r/s癌别。
$binary_remote_addr 表示遠程的ip地址喊括,當此nginx前方還存在代理時的畴,需進行處理
2.2 limit_req的參數(shù)
zone=one 表示這個參數(shù)對應(yīng)的全局設(shè)置就是one的那個內(nèi)存區(qū)域
burst=100 表示請求隊列的長度桐汤。
nodelay 表示不延時辅鲸,比如rate=5r/s菩彬,burst=10 那么來了15個請求赁还,能一次搞定并齐,否則漏麦,就是此秒只能搞定5個請求。一般都是不延期的設(shè)置况褪。
三撕贞、burst詳解及試驗
可以想象以下一個場景,某后臺tomcat的最大單頁請求是30個左右测垛,那么難道我需要設(shè)定成30r/s的話捏膨,那么這個設(shè)置就意義不大了,而當然可以通過區(qū)分url進行分開設(shè)置食侮,但是假如我不分開的話号涯,通過burst也可以完成rate設(shè)置成5r/s,一個頁面含有幾十個請求的要求。
初步假設(shè)是這樣的锯七,我第一秒有30個請求链快,后面每秒都是1-2個請求,rate=5r/s眉尸,注意這個速率是針對實時的請求或和burst中的5個請求(當一秒鐘沒有實時請求時域蜗,就從burst隊列中移除5個)。因此效五,我把burst設(shè)置成200個(可以頂用戶連續(xù)強制刷新大約10次)地消。第一次請求會刷靜態(tài)請求,后面就不會請求靜態(tài)的了畏妖,因此第一次一共會請求30個,其中實時的是5個疼阔,25個占用了burst的隊列戒劫,雖然nodelay把這25個也處理了半夷,但是隊列中占用的25個位置需要5秒來清除,假如第二秒刷了2個請求迅细,那么就會處理2個實時巫橄,并且隊列清空3個位置,當隊列滿的時候茵典,就會出現(xiàn)503的請求情況湘换。
驗證效果,基本按上面的方式统阿,連續(xù)每秒30個請求彩倚,即f5強制刷新,那么大約會再多少次后出現(xiàn)503的情況呢扶平,答案大約是8次(200/25).
四帆离、錯誤頁面的設(shè)置
在上面的server配置下,增加一個error_page ,配置一個loaction,注意這個用的是=/,它的優(yōu)先級高于 /结澄。因此不會去代理服務(wù)器找哥谷,直接就會再nginx下面的html找這個文件。
error_page 503 /error_503.html;
location = /error_503.html{
root html;
}
五麻献、請求連接數(shù)的配置,配置的位置和請求數(shù)量一樣们妥。
limit_conn_zone $binary_remote_addr zone=one:10m;
limit_conn one 2; #每個ip只能2個連接。
六勉吻、補充路徑詳解
格式 : location ???? {
其他.........
}
路徑優(yōu)先級 1. = /error.html 2.^~ /images/ 3. ~* .(gif|jpg|jpeg|png|bmp|swf)$ 4. /static/ 5. /
解釋王悍??餐曼?:1表示完整匹配压储,用=和完全的路徑匹配,比如 =/error.html 就匹配 error.html =/ 匹配根路徑
2表示開頭等于源譬,優(yōu)先級第二,越長就越能匹配集惋,比如^~ /abc/cd ^~/abc 第一個會優(yōu)先匹配/abc/cd/xxx
3表示不區(qū)分大小的正則,并且正則中含義是.jpg等結(jié)尾的踩娘,優(yōu)先級第三刮刑,同樣正則越長越高。
4表示開頭等于/static/的养渴,但是優(yōu)先級比第二種低雷绢,是一種其他配置找不到再找它,越長就越能匹配理卑。
5因為4說了是越長越能匹配翘紊,當能匹配/static/就不會匹配/,而/是所有其他的一個默認匹配。
特別補充比如:location ~* .(gif|jpg|jpeg|png|bmp|swf)$ { //注意正則與其他符號要空格藐唠,其他一些配置也是如是帆疟。
本文轉(zhuǎn)載至 https://blog.csdn.net/shuixiou1/article/details/80165525