惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 【当耐特】
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Y
Y Combinator Blog
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
I
InfoQ
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
C
Cybersecurity and Infrastructure Security Agency CISA
Know Your Adversary
Know Your Adversary
MongoDB | Blog
MongoDB | Blog
T
Tor Project blog
The Register - Security
The Register - Security
H
Help Net Security
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
NISL@THU
NISL@THU
P
Palo Alto Networks Blog
B
Blog RSS Feed
Latest news
Latest news
T
Threat Research - Cisco Blogs
The Hacker News
The Hacker News
C
Cisco Blogs
P
Privacy International News Feed
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
S
Schneier on Security
P
Proofpoint News Feed
Schneier on Security
Schneier on Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
Google Online Security Blog
Google Online Security Blog
H
Hacker News: Front Page
N
News and Events Feed by Topic
W
WeLiveSecurity

博客园 - AuOK?

深夜发文,惨痛教训,在redis集群中,不能使用 multi docker-compose 记录一个让人抓狂的错误 SVN 同一个仓库下,不同目录的自动更新方法 写点正则表达式的 MySQL 事务嵌套的方法 go mod PHP笔记 NGINXConfig windows 下修改文件属性值 nextcloud 应用开发 nextcloud环境搭建及部署 docker容器内访问宿主机,访问不通 错误:Host is unreachable 记录一下SQL的行行比较 记录一次nginx平滑升级 letsencrypt免费SSL证书自动续期 守护进程因echo挂掉的原因,以及重定向标准输入、标准输出和标准错误 openresty lua-nginx-module模块中文文档 记录一下,php正则获取字符串子串技巧 nginx localhost的坑
记录一下搞nextcloud的辛酸事吧
AuOK? · 2021-11-26 · via 博客园 - AuOK?

前段时间,利用centos7 + nginx + php8 + mysql8 部署了一个nextcloud,首选的是当时最新稳定版的NC22,根据官方文档一步步操作下来,遇到了很多问题

部署完成后,NC首次登录不上的、登录上去,无限循环 /remote.php/dav的,还有一个样式混乱的(重启web服务就好了,也不知道为什么)。

后面换了NC21版本,就没这些问题了。。。。。

部署完成之后,开始改代码,支持单点登录。不得不说,nextcloud的代码真不错,耦合性不强。

登录验证是通过 OC\Authentication\Login\Chain 构建的链条一步步验证下去的

(真不错,这代码,单点登录的验证也就是加在这链条上)

改完单点登录,又发现了新的问题。上传速度慢,最终的解决方法是,把PHP,nginx上传的参数配置调大,同时,不限制nextcloud文件分块大小。

后面通过挂载,扫描添加了几百上千万的文件,这时候,又出现了一个问题。。。

就是mysql的CPU占用很高(一直)。说说我处理的过程:

一开始,我以为是sql语句执行慢,导致的,跑去看了慢日志,结果没什么发现,后面又将fpm的日志,nginx的错误日志都看了,一样没什么发现。

通过SHOW FULL PROCESSLIST看到有几个线程执行一样的SQL语句,执行时间很长,一直都是executing的状态。但不知道是在哪触发的。

索性,我把nginx关闭,php-fpm关闭,但是MySQL的cpu负载还是下不来。这时候,可以想到应该是定时任务触发的SQL语句了。

后面通过nextcloud社区了解到,很多人都出现这个问题和文件扫描的定时任务每隔12个小时就会执行一次。在SHOW FULL PROCESSLIST中的Time可以验证这一点,说明是从文件扫描的定时任务触发的SQL查询。

想要解决这个问题,可以直接关闭文件扫描的后台任务,如果是通过web上传的文件,一般不会触发文件扫描的,我是通过挂载,而且挂载文件很多,文件和文件夹的大小都没有进行统计,才会触发的。

这里放一下SQL语句 (顺便提一下:oc_filecache的数据量在1300w左右,oc_mounts的数据量在500左右)

SELECT MAX(`user_id`) FROM `oc_filecache` `f` INNER JOIN `oc_mounts` `m` ON `storage_id` = `storage` WHERE `size` < 0 GROUP BY `storage_id` LIMIT 500;

SELECT `path` FROM `oc_filecache` WHERE (`storage` = 18 ) AND (`size` < 0 ) ORDER BY `fileid` DESC LIMIT 1;

一共发现两条SQL语句会出现这样的问题。通过分析,发现 这两条语句执行时索引都没有用对(stroage,size 和 size都是有索引的)。这两条SQL语句可以执行很久很久。。。。。

一开始我还以为是产生了死锁,但是不是,其实就是一直在执行,没有尽头。

我还用strace -p 分析了php定时任务的进程,就一直在restart_syscall,应该是在等待SQL返回数据。

后面看了oc_filecache的数据发现,size < 0的情况就只有 size = -1 (等于查询肯定比范围查询要好啊),所以最后就把size < 0 改成了size = -1了。虽然sql查询还有有点慢,但至少能结束,返回数据,总比之前没有返回的执行好。

但是如果,size < 0 的情况有很多种,那就不适用了。。。。

按照上面的处理后,MySQL的负载就下来了,也没有定时任务一直在等待返回了。

如果有人知道关于nextcloud的其它问题和解决办法,请告诉我,不胜感激(因为后面还要对它进行二开)

算是告一段落吧。。。