Gunicorn配置部分的翻譯

寫在前面,雖然翻譯得很爛,但也是我的勞動成果,轉載請注明出處,謝謝。
Gunicorn版本號19.7.1


Gunicorn配置

概述

三種配置方式

優先級如下,越后的優先級越大

1.框架的設置(現在只有paster在用這個)

2.配置文件(推薦使用這個)

3.命令行的賦值

查看配置的方法

$ gunicorn --check-config APP_MODULE

這個命令可以檢查app的配置

設置的參數詳細說明

關于環境變量

如前文所講,可以通過多種方式來設置運行參數,但是有一些參數是只能寫在配置文件中,而剩下那些可以寫在命令行中的參數,都是可以通過設置環境變量來設置的。

$ GUNICORN_CMD_ARGS="--bind=127.0.0.1 --workers=3" gunicorn app:app

config File

config 配置文件的地址

用法:'-c CONFIG, --config CONFIG'

默認值:None

這個參數需要在命令行中傳入,或者作為應用特定配置的一部分(后面半句我也不懂)

參數要求是文件的地址,或者是python的module(我猜是類似 python:some_module.module.conf)

需要注意的是,如果參數是python的module,則參數的形式必須是python:module_name

Server Socket 服務端口

bind 綁定端口

用法:-b ADDRESS, --bind ADDRESS

默認值:['127.0.0.1:8000']

就是指定綁定的端口號

官方提了一個可以綁定多個地址的例子

$ gunicorn -b 127.0.0.1:8000 -b [::1]:8000 test:app

如上,就是將app綁到了本地的ipv4和ipv6的接口

backlog 允許掛起的鏈接數

用法:--backlog INT

默認值:2048

就是設置允許掛起的連接數的最大值

官方推薦這個值設在64-2048

Worker Processes 工作進程相關

workers 進程數量

用法:-w INT, --workers INT

默認值:1

設置處理請求的進程數,官方推薦的值是2-4 x $(NUM_CORES),就是核心數的2-4倍,而我在網上查到的,大多數是推薦設置為核心數的兩倍+1

worker_class 進程的工作方式

用法:-k STRING, --worker-class STRING

默認值:sync

設置進程的工作方式,默認是同步,如果需要設置異步,則需要下載相關的庫

可選的參數如下:

*eventlet-要求eventlet版本大于0.9.7

*gevent-要求gevent版本大于0.13

*tornado-要求tornado版本大于0.2

*gthread-安裝了futures庫的python2(意思就是python3隨便用?)

*giohttp-python3.4以上,且aiohttp版本大于0.21.5

如果要用自己的庫來處理的話,就將庫添加到gunicorn.workers,然后再選擇自己的worker

threads 線程數

用法:--threads INT

默認值:1

就是設置開啟的多線程的數目,官方也是推薦設置為核心數的兩至四倍。

這個設置只對進程工作方式為Gthread的產生影響。

worker_connections 進程鏈接數

用法:--workers-connections INT

默認值:1000

設置同時鏈接客戶端的閥值。

這個設置只對進程工作方式為Eventlet和Gevent的產生影響。

max_requests 最大請求數

用法:--max-requests INT

默認值:0

設置一個進程處理完max_requests次請求后自動重啟

就是設置這個可以預防內存泄漏,如果不設置的話,則進程不會自動重啟

max_requests_jitter 最大請求數的變化值

用法:--max-requests-jitter INT

默認值:0

這個的作用與max_requests的幾乎一致,只是后者設置為固定值,而這個的值是randint(0, max_requests_jitter)

timeout 過期時間

用法:-t INT, --timeout INT

默認值:30

worker沉默(不工作?不發送response?)超過timeout秒之后就會重啟

對于同步worker來講,官方建議用default值就可以了,當然,如果你確認這個值不滿足你的要求的時候,可以調高。

對于異步worker來講,worker仍然會繼續通信(發response?),而且對于處理一個獨立的請求來講,它是與所需的時間無關。(個人理解為,對于異步來講,這個參數是沒有意義的)

graceful_time 優雅的timeout(后置的timeout)

用法:--graceful-timeout INT

默認值:30

其實就是當worker接收到重啟的信號之后,再工作這么久才真正執行重啟。

keepalive 鏈接存活時間

用法:--keep-alive INT

默認值:2

發送完一個response后,等待keepalive秒再關閉連接

建議設置為1-5

Security 安全方面的設置

limit_request_line 設置請求行的最大長度

用法:--limit-request-line INT

默認值:4094

允許設置的值為0-8190,0是不限制的意思。

文檔中提到這個參數可以防止DDOS攻擊,具體我還要去查一下為什么。

(網上查到的request-line其實就是請求的第一行,后面的都是鍵值對。因為RESTful的要求,這個第一行會包含挺多的信息)

limit_request_fields 設置請求頭的字段的范圍

用法:--limit-request-fields INT

默認值:100

(這個我并不是很懂)

limit_request_field_size 設置請求頭的大小

用法:--limit-request-field_size INT

默認值:8190

Debugging 調試

reload 重載

用法:--reload

默認值:False

更改代碼的時候重啟workers, 只建議在開發過程中開啟。

文檔推薦下載inotify這個包來作為重載引擎。

reload_engine 重載的引擎

用法:--reload-engine STRING

默認值:auto

選擇重載的引擎,支持的有三種,分別是autopollinotify(需要單獨安裝)

spew 顯示

用法:--spew

默認值:False

啟動一個能夠將服務器執行過的每一條語句都打印出來的函數,然后這個選項是原子性的,就是要么全打,要么不打。

check_config 檢查配置

用法:--check-config

默認值:False

顯示現在的配置。

Server Mechanics 服務結構方面

preload_app 預重載應用

用法:--preload

默認值:False

在worker進程被復制(派生)之前載入應用的代碼。

通過預加載應用,可以節省內存資源和提高服務啟動時間。當然,如果你將應用加載進worker進程這個動作延后,那么重啟worker將會容易很多。

sendfile 發送文件?

用法:--no-sendfile

默認值:None

這個值可以在環境變量設置。(文檔中并沒有提到這個選項是干嘛的 )

chdir 改變目錄?

用法:--chdir

默認值:/home/docs/checkouts/readthedocs.org/user_builds/gunicorn-docs/checkouts/latest/docs/source

在載入應用之前改變目錄(但是文檔中沒講明白這個目錄是存放什么的)

daemon 守護進程

用法:-D, --daemon

默認值:False

以守護進程形式來運行Gunicorn進程。

其實就是將這個服務放到后臺去運行。

raw_env 設置環境變量

用法:-e ENV, --env ENV

默認值:[]

用鍵值對來設置環境變量。

$ gunicorn -b 127.0.0.1:8000 --env FOO=1 test:app

pidfile 進程文件名

用法:-p FILE, --pid FILE

默認值:None

設置pid文件的文件名,如果不設置的話,不會創建pid文件。

worker_tmp_dir 工作臨時地址

用法:--worker-tmp-dir DIR

默認值:None

設置工作的臨時文件夾的地址。

如果不設置,則會采用默認值,也就是調用os.fchmod來找一個地址,但是如果這個地址是disk-backed類型的文件系統,很有可能會讓worker阻塞;或者如果默認的硬盤滿掉了,Gunicorn也不會啟動。所以文檔建議我們在新掛載一個/tmpfs,然后把這個地址賦到這里來

sudo cp /etc/fstab /etc/fstab.orig
sudo mkdir /mem
echo 'tmpfs       /mem tmpfs defaults,size=64m,mode=1777,noatime,comment=for-gunicorn 0 0' | sudo tee -a /etc/fstab
sudo mount /mem
..... --worker-tmp-dir /mem

user 設置用戶

用法:-u USER, --user USER

默認值:1005

選擇一個工作進程來作為當前用戶。

這里可以輸入有效的用戶id或者用戶名,那么在用pwd.getpwnam(value)的時候就可以取到這個值。如果輸入None,則不會改變當前工作進程的用戶。

group 設置用戶組

用法:-g GROUP, --group GROUP

默認值:205

與上面那個類似。

umask 權限掩碼

用法:-m INT, --umask INT

默認值:0

Gunicorn對寫文件的權限。

initgroups 設置新組

用法:--initgroups

默認值:False

設置為真的時候,會將所有worker進程加到一個指定名字的新組中。

tmp_upload_dir 上傳文件的臨時存放地址

默認值:None

保存那些臨時的請求內容。

文檔講這個選型未來可能會被移除。

如果設置了路徑,要確保worker進程有權限去寫。如果不設置,則會選擇/tmp來存放。

secure_scheme_headers

默認值:{'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}

這個字典指明了哪些請求頭是HTTPS請求。

forwarded_allow_ips 選擇接收的對象

用法:--forwarded-allow-ips STRING

默認值:127.0.0.1

比如在跟Nginx一起部署的時候,如果Nginx不在本機上(localhost),為了避免偽造host的攻擊,可以指定只接收從那些指定的地址傳來的連接,而如果Nginx就在本機上,就直接按默認的127.0.0.1就行了。

Logging 日志設置

accesslog 設置訪問日志存放的地方

用法:--access-logfile FILE

默認值:None

設置為-就是記錄到標準輸出。

access_log_format 訪問日志的格式

用法:--access-logformat STRING

默認值:%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"

IdentifierDescription
hremote address
l'-'
uuser name
tdate of the request
rstatus line (e.g. GET / HTTP/1.1)
mrequest method
UURL path without query string
qquery string
Hprotocol
sstatus
Bresponse length
bresponse length or '-' (CLF format)
freferer
auser agent
Trequest time in seconds
Drequest time in microseconds
Lrequest time in decimal seconds
pprocess ID
{Header}irequest header
{Header}oresponse header
{Variable}eenvironment variable

errorlog 設置錯誤日志的存放地址

用法:--error-logfile FILE, --log-file FILE

默認值:-

設置為-就是記錄到標準輸出。

loglevel 設置日志等級

用法:--log-level LEVEL

默認值:info

debug,info,warning,error,critical

capture_output 捕捉標準輸出

用法:--capture-output

默認值:False

重定向標準輸出和標準錯誤信息到錯誤日志。

logger_class 選擇處理日志的方法

用法:--logger-class STRING

默認值:gunicorn.glogging.Logger

logconfig 日志的配置

用法:--log-config FILE

默認值:None

默認使用python標準庫logging的配置文件形式。

syslog_addr 系統日志的地址

用法:--log-syslog-to SYSLOG_ADDR

默認值:udp://localhost:514

設置發送系統日志信息的地址。

可傳遞的方式

  • unix://PATH#TYPE對于unix的socket來講,可以用stream或者gram形式。
  • udp://HOST:PORT
  • tcp://HOST:PORT

syslog 啟用系統日志來記載

用法:--log-syslog

默認值:False

把Gunicorn的日志發送到系統日志。

syslog_prefix 系統日志的前綴

用法:--log-syslog-prefix SYSLOG_RREFIX

默認值:None

設置每條系統日志的前綴,默認是進程的名字。

syslog_facility 系統日志的別名

用法:--log-syslog-facility SYSLOG_FACILITY

默認值:user

enable_stdio_inheritance 標準輸入輸出的繼承

用法:-R, --enable-stdio-inhertitance

默認值:False

允許標準輸入輸出的繼承,允許標準輸入輸出文件描述符在守護進程模式下的繼承。

可以設置環境變量PYHTONUNBUFFERED來取消python標準輸出的緩存(?)

statsd_host

網上查到statsd的意思是單機搭建,暫時沒理解是什么意思。

statsd_prefix

不懂不懂

Process Naming 進程命名

proc_name 設置進程名字

用法:-n STRING, --name STRING

默認值:None

setproctitle這個模塊(需要額外安裝)去給進程命名,方便我們在ps或者top的時候分辨出哪個是我們想要的。

不設置的時候,會用default_proc_name

default_proc_name 默認的進程名

gunicorn

Server Mechanics 服務架構

pythonpath

用法:--pythonpath STRING

默認值:None

將這些路徑加到python path去

e.g.'/home/djangoprojects/myproject,/home/python/mylibrary'

paste

PASS

Server Hooks 服務的鉤子函數

on_starting

def on_starting(sever):pass

這個函數會在主進程初始化后被調用。

函數需要接收一個服務的實例作為參數。

on_reload

def on_reload(server):pass

函數會在接收到掛起信號而重載的時候被調用。

函數需要接收一個服務的實例作為參數。

when_ready

def when_ready(sever):pass

函數會在服務啟動之后就被調用。

函數需要接收一個服務的實例作為參數。

pre_fork

def post_fork(sever, worker):pass

函數在worker派生(生成)之前被調用。

函數需要接收一個服務的實例和一個新的worker。(不懂,既然函數是在生成worker之前調用,那又怎么將這個未生成的worker傳到這個函數里面來呢)

post_fork

def post_fork(sever, worker):pass

函數在worker派生(生成)之后被調用。

函數需要接收一個服務的實例和一個新的worker。

post_worker_init

def post_worker_init(worker):pass

函數在worker完成應用初始化之后被調用。

函數需要接收一個完成初始化的worker。

work_int

def worker_int(worker):pass

函數會在worker退出信號流(?)或者掛起的時候調用。

函數需要接收一個完成初始化的worker。

work_abort

def worker_abort(worker):pass

函數會在worker接收到請求異常終止信號的時候被調用。

一般這個情況發生在timeout(超時)。

函數需要接收一個完成初始化的worker。

pre_exec

def pre_exec(server):pass

函數會在新的主進程生成(派生)之前被調用。

函數需要接收一個服務的實例。

pre_request

def pre_request(worker, req):worker.log.debug("%s %s" % (req.method, req.path))

函數會在worker處理請求之前被調用。

函數需要接收這個worker,和請求作為參數。

post_request

def post_request(worker, req, environ, resp):pass

函數會在worker處理請求后被調用。

函數需要接收這個worker,和請求作為參數。

child_exit

def child_ext(sever, worker):pass

函數會在worker完全退出之后,在主進程被調用。

函數需要接收這個服務的實例,和這個worker作為參數。

worker_exit

def worker_exit(server, worker):pass

函數會在worker完全退出之后,在worker進程被調用。

函數需要接收這個服務的實例,和這個worker作為參數。

nworkers_changed

def nworkers_changed(server, new_value, old_value):pass

函數在worker數量產生變化后被調用。

函數接收的參數為,服務的實例,新的worker數量,和變化之前的數量。

第一次的時候,old_value是None

on_exit

def on_exit(server):pass

函數在退出Gunicorn的時候被調用。

函數接收服務的實例作為參數。

Server Mechanics

proxy_protocol 代理協議

用法:--proxy_protocol

默認值:False

使用代理模式。

文檔介紹了開啟這個模式后,可以讓stunnel作為HTTPS的前端,然后Gunicorn作為HTTP的服務器。(并不是很懂,暫時略過)

proxy_allow_ips

用法:--proxy-allow-from

默認值:127.0.0.1

不懂不懂

設置*來禁用這個功能。

SSL

keyfile

用法:--keyfile FILE

默認值:None

指定ssl的key文件(那是公匙還是私匙?)

certfile

用法:--certfile FILE

默認值:None

指定ssl的證書文件

ssl_version

用法:--ssl-version

默認值:2

指定使用的ssl版本(也要看標準庫的ssl模塊是否支持)

cert_reqs

用法:--cert-reqs

默認值:0

是否需要客戶端提供證書(也要看標準庫的ssl模塊是否支持)

ca_certs

用法:--ca-certs FILE

默認值:None

指定CA證書文件

suppress_ragged_eofs

用法:--suppress-ragged-eofs

默認值:True

禁止粗魯的停止?不是很懂

do_handshake_on_connect

用法:--do-handshake-on-connect

默認值:False

在socket連接的時候是否執行ssl握手(也要看標準庫的ssl模塊是否支持)

ciphers

用法:--ciphers

默認值:TLSv1

指定使用的加密算法(也要看標準庫的ssl模塊是否支持)

Server Mechanics

raw_paste_global_conf

pass

轉載于:https://www.cnblogs.com/nanrou/p/7026789.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371950.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371950.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371950.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

臺式計算機風扇聲音大怎么處理,如何解決電腦電源風扇聲音大的問題?

現在的臺式機一般用3到5年后,一些問題自然也就慢慢表現出來了。很多網友在使用電腦過程中都有電腦風扇聲音大怎么辦的問題,電腦風扇聲音大就會讓人覺得使用電腦很不舒服,怎么辦好呢?出現重要的問題要如何解決好呢?現在…

jsp分頁功能

http://blog.csdn.net/xiazdong/article/details/6857515轉載于:https://www.cnblogs.com/Baronboy/p/6112403.html

Spring Security第1部分–具有數據庫的簡單登錄應用程序

什么是Spring Security? Spring Security是一個提供安全解決方案的框架,可在Web請求級別和方法級別上處理身份驗證和授權。 Spring安全性通過兩種方式處理安全性。 一種是安全的Web請求,另一種是在URL級別限制訪問。 Spring Security使用Serv…

計算機應用 winxp,2017年職稱計算機考試模塊WindowsXP試題

2017年職稱計算機考試模塊WindowsXP試題全國專業技術人員計算機應用能力考試是專業技術人員資格考試的一種。接下來應屆畢業生小編為大家搜索整理了2017年職稱計算機考試模塊WindowsXP試題,希望大家有所幫助。1. Windows XP中刪除某個文件的快捷方式【 A 】。A. 對原…

Python基礎(8)_迭代器、生成器、列表解析

一、迭代器 1、什么是迭代 1 重復   2 下次重復一定是基于上一次的結果而來 1 l[1,2,3,4] 2 count0 3 while count < len(l): 4 print(l[count]) 5 count1 迭代舉例2、可迭代對象 可進行.__iter__()操作的為可迭代對象 #print(isinstance(str1,Iterable)),判斷str…

Angularjs2-EXCEPTION: Response with status: 200 Ok for URL:

利用jsonp跨域請求數居&#xff0c;報錯 core.umd.js:3070 EXCEPTION: Response with status: 200 Ok for URL: 參考&#xff1a;stackoverflow 未解決。。。腦仁疼。。。有小伙伴也碰到過這個問題么&#xff1f; 16/11/30 問題解決 1.服務器端API允許跨域訪問(返回的數據添加允…

圖片無法刪除要計算機管理員,存在桌面的圖片刪不掉,怎么處理?提示是需要管理員權限。...

將下面代碼復制到記事本里&#xff0c;重命名為1.bat&#xff0c;然后打開&#xff0c;這時你右鍵圖片會出現管理員取得所有權&#xff0c;然后取得所有權后再刪除試試Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\runas]管理員取得所有權NoWorkingDirecto…

Java對象序列化的本機C / C ++類似性能

您是否曾經希望過像使用C 這樣的本地語言將Java對象轉換成字節流一樣快的速度&#xff1f; 如果您使用標準的Java序列化&#xff0c;您可能會對性能感到失望。 Java序列化的目的是與盡可能快而緊湊地序列化對象的目的截然不同。 為什么我們需要快速緊湊的序列化&#xff1f; 我…

WebStrom Sass 編譯配置 windows

第一步&#xff1a; 先安裝Ruby下載 一路next 安裝完成后打開開始菜單 打開后輸入 gem install sass sass -v 出現版本號說明成功 第二部配置webstorm 在webstorm中settings中搜索file watchers工具&#xff0c;在此工具中添加一個scss的watcher 確定&#xff0c;打開一個scss…

非本地跳轉之setjmp與longjmp

非本地跳轉(unlocal jump)是與本地跳轉相對應的一個概念。 本地跳轉主要指的是類似于goto語句的一系列應用&#xff0c;當設置了標志之后&#xff0c;可以跳到所在函數內部的標號上。然而&#xff0c;本地跳轉不能將控制權轉移到所在程序的任意地點&#xff0c;不能跨越函數&am…

清華計算機自主招生試題,2017年清華大學自主招生筆試題

2017年清華大學自主招生筆試題2017高考結束后&#xff0c;全國各大高校自主招生面試開始了&#xff0c;以下是百分網小編搜索整理的關于2017年清華大學自主招生筆試題&#xff0c;供各位參考&#xff0c;希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!…

擴展劑:模式還是反模式?

擴展器模式在最近幾年變得很流行&#xff0c;甚至已經在OSGi標準&#xff08;例如&#xff0c;藍圖服務和Web應用程序規范&#xff09;中使用。 在處女座&#xff0c;我們從一開始就與擴展程序一起工作&#xff0c;但是盡管它們具有優勢&#xff0c;但它們仍有一些明顯的缺點。…

python html格式編碼

web應用如用到ace等網絡編輯器的時候&#xff0c;如要支持html,xml等格式的文件編輯&#xff0c;輸入ace 的文本內容必須先進行html格式編碼&#xff1a; def html_escape(content): import cgi return cgi.escape(content)轉載于:https://www.cnblogs.com/zhouxiaoming/p/703…

字符串替換

題目: 給定一個英文的字符串, 要求你將其中的元音刪除掉, 返回新的字符串. 例如:"This website is for losers LOL!" --> "Ths wbst s fr lsrs LL!" 當看到這個題目的時候, 第一個想起的就是re模塊的正則表達式. 不過由于最近使用過字符串的replace方…

小學計算機技術指導綱要,《中小學信息技術課程指導綱要(試行)》

《中小學信息技術課程指導綱要(試行)》2000年11月教育部頒發的《中小學信息技術課程指導綱要(試行)》教學目標&#xff1a;1、 增強信息意識&#xff0c;了解信息技術的發展變化及其對工作和社會的影響。2、 初步了解計算機基本工作原理&#xff0c;學會使用與學習和實際生活直…

JavaFX 2.0布局窗格– FlowPane和TilePane

FlowPanes和TilePanes是不錯的布局窗格&#xff0c;如果您想一個接一個地連續地水平或垂直地布局子級&#xff0c;則可以。 它們彼此非常相似&#xff0c;因為它們都將子級布置成列&#xff08;在水平Flow / TilePane的情況下&#xff09;并按其寬度或行&#xff08;在垂直Flow…

EasyRMS錄播管理服務器項目實戰:windows上開機自啟動NodeJS服務

本文轉自EasyDarwin開源團隊成員Penggy的博客&#xff1a;http://www.jianshu.com/p/ef840505ae06 近期在EasyDarwin開源團隊開發一款基于EasyDarwin在錄播服務器EasyRMS過程中,我采用node作為EasyRMS錄播服務器錄播管理服務器的開發平臺,基于node開發關于設備管理,錄像計劃,錄…

windows10搭建django1.10.3+Apache2.4

很多教程都是在linux上搭建&#xff0c;windows上似乎天生不太適合&#xff0c;但是我還是愿意試試這個坑。 首先 交代一下自己的環境 python3.5.2 64位 django 1.10.3 apache 2.4 64位 windows 10 重點在apache上。 python 和django 相信有興趣看這篇文章的基本上也都已經了解…

深入理解計算機系統 視頻教程,深入理解計算機系統1

第一章 計算機系統漫游代碼段的生命周期hello.c#include int main(){printf("hello world!\n");return 0;}1.1 前序源程序(源文件)實際上就是一個由0和1組成的位(又成比特bit)序列,8個位被組組成一組,稱為字節。每個字節表示程序中的某些文本字符(大部分的現代計算機…

Java與iOS對話:Java對象與Apple plist序列化

我很高興地宣布我的第一個開源項目java-plist-serializer可以幫助您將Java&#xff08;尤其是基于Spring的應用程序&#xff09;與iOS應用程序集成。 背景 我正在將Java Webapp作為后端并且客戶端是iOS設備的項目。 最近&#xff0c;我收到了創建Web服務的任務&#xff0c;該服…