比较穷,买不起独服 / 高端 VPS,只能拿 1GB 内存的破烂凑合一下建站。
众所周知,apache2
非常吃资源,经常内存就直接给吃满,所以这时候优化就显得十分重要。
(其实是懒得改成 nginx ///
首先,bbr
必须先开起来。顺便再把最大线程数 threads-max
调大。
1 2 3 4 |
net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr net.ipv4.tcp_fastopen=3 kernel.threads-max=524288 |
然后再调大 nofile
及 noproc
。
1 2 3 4 5 6 7 8 |
* soft nofile 524288 * hard nofile 524288 * soft nproc 131072 * hard nproc 131072 * soft memlock unlimited * hard memlock unlimited * soft stack unlimited * hard stack unlimited |
系统运行久了 systemd-journald
一直会占满内存,故把日志存储在本地硬盘中。
1 2 |
[Journal] Storage=persistent |
最重要的是 apache2
的 mpm_event
配置
1 2 3 4 5 6 7 8 9 10 |
ServerLimit 32 <IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 525 ThreadLimit 128 ThreadsPerChild 64 MaxRequestWorkers 2048 MaxConnectionsPerChild 1024 </IfModule> |
但是问题是,这样配置之后,apache2
总是会爆到
systemctl status apache2 里面的 Tasks limit
。
cat /proc/xxx/limits 后才发现上面对于 limits
的修改并没有生效。
其实是因为对于
/etc/security/limits.conf 的修改仅对 PAM
用户有效,而对 systemd
无效。需要在另外的地方另作修改。
然后还会发现 systemd
还会有一个 cgroup
限制,其实就是上面的 Tasks limit
,可以通过调整以下两个配置解决。
1 2 3 4 5 6 7 8 9 10 |
[Manager] # ... DefaultTasksMax=131072 # ... DefaultLimitSTACK=infinity # ... DefaultLimitNOFILE=524288 # ... DefaultLimitNPROC=131072 DefaultLimitMEMLOCK=infinity |
1 2 3 |
[Login] # ... UserTasksMax=infinity |
然后还有个 systemd-journald
内存泄漏问题目前还没有找到解决方案。。。
未完待续