red*_*off 4 ubuntu couchdb systemd ubuntu-16.04
我最近升级到Ubuntu 16和CouchDB 1.6.当我的服务器受到大量连接emfile的攻击时,我在couch.log中遇到错误.我之前看到过这些错误,它们似乎与https://wiki.apache.org/couchdb/Performance中提到的系统资源限制有关.我相信我的主要问题是ERL_MAX_PORTS.我已经将ulimit增加到40000(通过PAM)并添加export ERL_MAX_PORTS=40000到/ etc/default/couchdb.
Ubuntu 16使用systemd所以我添加Environment="ERL_MAX_PORTS=40000"到[Service]/etc/systemd/system/multi-user.target.wants/couchdb.service中的部分,但这似乎不起作用.
我甚至尝试修改/ usr/bin/couchdb并添加env ERL_MAX_PORTS=40000到脚本的顶部.
唯一可行的是当我从命令行手动运行couchdb时,例如$ env ERL_MAX_PORTS=40000 && sudo /usr/bin/couchdb.这不是一个理想的解决方案,我宁愿让它与systemd一起工作.
我以前在Ubuntu 14上运行CouchDB 1.5并将我的系统资源限制(请参阅https://wiki.apache.org/couchdb/Performance)增加到大约40000,并且它正在处理许多连接而没有任何问题.
有没有人有幸在Ubuntu 16上解决这个问题?
我偶然发现了/sf/answers/2765430531/,这是我需要让它工作的缺失金块.
具体来说,我不得不修改/etc/systemd/system.conf并添加
DefaultLimitNOFILE=40000
Run Code Online (Sandbox Code Playgroud)
总而言之,这是我的配置:
让100-couchdb.conf成为:
#<domain> <type> <item> <value>
couchdb hard nofile 40000
couchdb soft nofile 40000
* hard nofile 40000
* soft nofile 40000
root hard nofile 40000
root soft nofile 40000
Run Code Online (Sandbox Code Playgroud)
1)通过PAM设置限制:
cp 100-couchdb.conf /etc/security/limits.d/100-couchdb.conf
cp 100-couchdb.conf /etc/security/limits.conf
echo "session required pam_limits.so" >> /etc/pam.d/su
Run Code Online (Sandbox Code Playgroud)
2)增加systemd中允许的文件数
echo "DefaultLimitNOFILE=40000" >> /etc/systemd/system.conf
Run Code Online (Sandbox Code Playgroud)
3)通过systemd增加Erlang允许的连接数
sed -i "s/\[Service\]/\[Service\]\nEnvironment=ERL_MAX_PORTS=40000/g" /etc/systemd/system/multi-user.target.wants/couchdb.service
Run Code Online (Sandbox Code Playgroud)
4)同时增加Erlang允许的连接数(我不确定是否需要这个,因为我们已经通过systemd配置了这个,但它似乎没有受到伤害)
echo "export ERL_MAX_PORTS=40000" >> /etc/default/couchdb
Run Code Online (Sandbox Code Playgroud)
注意:在运行一些压力测试时,我发现我需要将限制增加到大约40000以支持10,000个并发连接.我猜这是由于某些开销,每个连接需要多个文件.
| 归档时间: |
|
| 查看次数: |
1019 次 |
| 最近记录: |