Connection
增加 CouchDB 並發連接
我正在使用 CouchDB 每秒處理數千個請求。在重負載下,它似乎響應緩慢,所以我開始使用 apache bench 進行測試。Couch 可以響應 50k 個請求,1k 個並發。然後我將並發性提高到 2k,但基準總是在大約 8k 請求時被打破,並顯示以下消息:
apr_socket_recv: Connection reset by peer (104)
在 CouchDb 日誌中,我可以找到以下兩個錯誤:
[Sat, 21 Nov 2015 17:16:07 GMT] [error] [<0.8073.2>] {error_report,<0.31.0>, {<0.8073.2>,crash_report, [[{initial_call, {mochiweb_acceptor,init, ['Argument__1','Argument__2','Argument__3']}}, {pid,<0.8073.2>}, {registered_name,[]}, {error_info, {exit, {error,accept_failed}, [{mochiweb_acceptor,init,3, [{file,"mochiweb_acceptor.erl"},{line,34}]}, {proc_lib,init_p_do_apply,3, [{file,"proc_lib.erl"},{line,239}]}]}}, {ancestors, [couch_httpd,couch_secondary_services, couch_server_sup,<0.32.0>]}, {messages,[]}, {links,[<0.105.0>]}, {dictionary,[]}, {trap_exit,false}, {status,running}, {heap_size,233}, {stack_size,27}, {reductions,330}], []]}} // and this: [Sat, 21 Nov 2015 17:11:54 GMT] [error] [<0.105.0>] {error_report,<0.31.0>, {<0.105.0>,std_error, {mochiweb_socket_server,297, {acceptor_error,{error,accept_failed}}}}}
可悲的是,我不明白他們的意思。
到目前為止,我所做的嘗試增加 CouchDB 的資源:
將文件描述符限制提高到 250k,硬和軟
如此處所述,提高了“系統資源限制” :
export ERL_MAX_PORTS=8192
<-雖然我認為這已被棄用export ERL_MAX_ETS_TABLES=6000
export ERL_FLAGS="+Q 350000 +P 750000 +A 100"
提高了 CouchDB 配置中的幾乎所有值
我也讀過一些關於埠處於 TIME_WAIT 的內容,但在基準測試之後,它似乎只有 280 個埠處於該狀態
沒有任何效果。
對於這些測試,我使用的 VM 具有:
Ubuntu 14.04.2
CouchDB 1.5.0
Erlang R16B03 (erts-5.10.4)
CouchDb 的 Kxepal 將我連結到這封電子郵件,上面寫著:
limits.conf 的一個常見問題是 couchdb su 對 couchdb 使用者和 debian/ubuntu 中的 /etc/pam.d/su 預設不尊重limits.conf,您需要啟用它。
所以我做了
vim /etc/pam.d/su
並發現:# Sets up user limits, please uncomment and read /etc/security/limits.conf # to enable this functionality. # (Replaces the use of /etc/limits in old login) #session required pam_limits.so
我取消了最後一行的註釋,我重新啟動了 VM,CouchDB 現在支持任意數量的並發請求。它一直忽略限製配置。
我還了解到/意識到實際上需要大量文件描述符的是基準測試本身,而不是要進行基準測試的服務。也許我應該從不同的 VM 進行基準測試。