Nextcloud打开缓慢\卡顿的一些优化

Linux, PHP, 折腾 2020/02/25

有些朋友问道我关于Nextcloud优化的问题,基本上就是新装NC后缓慢,打开网页一卡一卡的

其实之前这个我之前也写过:宝塔面板下nextcloud完美优化配置

这次就单独提出来,详细说说,本文环境为CentOS 7 + 宝塔,root用户权限,实际命令请根据实际情况修改

官方文档

NC的官方文档其实写的很详细了,本文也是基于这个文档来操作的,最新版(18)也新增了一些优化选项,建议阅读

https://docs.nextcloud.com/server/18/admin_manual/installation/server_tuning.html

开始

后台任务

NC的后台任务执行方式分为3中,AJAXWebcronCron

默认是AJAX即在每次访问Nextcloud任意页面都会通过AJAX的方式发起定时任务的执行请求,这种方式如果没有自己的独立服务器或者VPS的话还是比较方便省心的

但官方推荐使用Cron,和Nginx或Apache等WEB服务独立开来,互不影响

在Nextcloud设置 — 基本设置里,选择为 Cron

然后SSH到服务器,添加crontab定时任务

crontab -e

添加一行,并保存

*/5 * * * * sudo -u www php -f /www/wwwroot/file.bugxia.com/cron.php

内存缓存

通过使用内存作为数据缓存的话,可以提高NC的性能,以加快WEB端的访问速度,并且Nextcloud支持多个内存缓存后端,如APCuRedisMemcached

这里以APCu+Redis为例,并且官方推荐的缓存组合就是APCu和Redis,其他的缓存后端配置请参阅:Nextcloud内存缓存优化的官方文档

安装PHP的APCu+Redis扩展

配置

安装完毕后,打开/www/wwwroot/file.bugxia.com/config/config.php,在其尾部添加以下代码

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => [
	'host' => '127.0.0.1',
	'port' => 6379,
],
'memcache.locking' => '\OC\Memcache\Redis',

开启HTTP2

宝塔面板安装的Nginx默认已支持http2,这里不再赘述

[root@ali-sg ~]# nginx -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.1.1b  26 Feb 2019
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/www/server/nginx --with-openssl=srclib/openssl --add-module=srclib/ngx_devel_kit --add-module=srclib/lua_nginx_module --add-module=srclib/ngx_cache_purge --add-module=srclib/nginx-sticky-module --add-module=srclib/nginx-http-concat --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-stream --with-stream_ssl_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-pcre=srclib/pcre-8.42

优化PHP-FPM参数

这里也是需要根据自身服务器环境进行设置,不过基本的前提就是并发量足够大,内存就要足够大

宝塔的配置文件路径在 /www/server/php/73/etc/php-fpm.conf

官方给的参数是

pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 18

宝塔面板上可以很方便的进行PHP-FPM参数设置

开启PHP OPcache

通过安装OPcache扩展,也可以在一定程度上提升PHP的性能

实测

简单测试,可以用Chrome自带的控制台关闭Chrome缓存,连续打开几次同一个页面记录加载时间

优化前

平均加载时间都在5秒左右

优化后

平均加载时间缩短至在2秒左右

效果还是很明显的

本文标签:


10条评论

    • Bug侠 评论于

      @lkainan 这个看着好像是某个文件的预览链接,不过我也没头绪…… :笑哭:

      • lkainan 评论于

        @Bug侠 最后查到了,是开了预览。 它在预览1个加密的word文件的时候,由于有密码保护,预览失败,超时了。

  • 陈·锋 评论于

    我更新到18.0.3以后发现NC会经常出现加载页面出现问题的倒计时,然后后台直接点前端就会要一直登陆,把链接重置以后就好了 :笑哭:
    目前觉得NC更新太快了,好多东西都拉垮了。我是Win7,用Webdav添加网络磁盘有容量不正常,目录不显示但是能同步的问题 :二哈:

    • Bug侠 评论于

      @陈·锋 我这边也是18.0.3,目前看还正常。
      确实如你所说,NC本身基于Owncloud,代码量比较大,后期更新bug也越来越多
      它Windows的客户端从2.6.3就不支持Win7了,见这里:https://github.com/nextcloud/desktop/pull/1727
      快更新Win10吧 :萌:

      • 陈·锋 评论于

        @Bug侠 Win7钉子户表示没办法忍受危软的Windows Bug更新,为了稳定还是钉在Win7,现在越更新NC越觉得漏洞太多,希望能够有所改善吧 :二哈:

  • ada 评论于

    这两天在搞nextcloud18,在原有的网站上使用子目录的方法架设,但原站不能使用443端口。怎么禁用https。安装完成后,打开网站会自动重定向到https,我在nginx里已经把关于https的设置全部关了。url重定向也关。但是还是每次打开网站还是自大动转到https下,怎么破?

    • Bug侠 评论于

      @ada 我这边测试了一下使用nginx同时监听80和443,访问80端口,使用chrome确实会自动跳转到443,但是单独开一个隐身窗口,就不会自动跳转443。
      然后使用Edge,直接就打开了80,没有跳转443
      所以大概率是浏览器的缓存导致的…… :doge:

  • leroy 评论于

    您好,请教下nextcloud 安装完成后通过webdav 链接无法链接到服务器(已经绑定ssl证书),是什么原因?

    • Bug侠 评论于

      @leroy 不好意思啊,我这边手机上使用webdav是正常的,之前也没有遇到过类似的问题,所以没法帮到你。另外,貌似有一些软件,webdav协议的前缀不太一样,有些可能是https://有些可能是davs://
      可以再排查一下 :汗:

    评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)