打开一个嵌入块很多的文档后软件直接不能用了,且无法关闭软件

本贴最后更新于 899 天前,其中的信息可能已经时异事殊

打开下面这样一个有很多嵌入块的文档:

image.png

嵌入块显示不出来,而且软件的索引功能失效,其他所有引用块都点击不了,而且悬浮窗也显示不出东西,反链面板也全部失效,文档树也全部失效,看似没卡,实际上什么功能都用不了

image.png

而且此时软件无法关闭,只能用任务管理器关闭

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18693 引用 • 69784 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250 1 评论

    等下个版本看看,谢谢。

    2 回复
    +1
    zihuzi
  • Belf

    +1

  • fangly

    更新到 1.5.0 后,我一打开软件,就和上面描述的情况一样了,软件用不了,也关不掉,只能用任务管理器关掉,回退到 1.4.8 软件打开没问题:

    temp99.gif

    temp100.gif

    我退回 1.4.8,然后把打开着的标签页全部关掉,再装 1.5.0,这样是没问题的。

    成功升级到 1.5.0 后,这个帖子中嵌入块的问题仍然存在。

    1 回复
    2 操作
    fangly 在 2021-11-09 16:30:25 更新了该回帖
    fangly 在 2021-11-09 16:28:57 更新了该回帖
  • 请试下重建索引或者删除数据库文件重现初始化库看看。

    1 回复
  • fangly

    两种方法都试了,还是不行(指的是 1.5.0 中的嵌入块问题)

    回退 1.4.6,本帖中的嵌入块是没问题的

    1 回复
  • 麻烦上传一下日志,谢谢。

    1 回复
  • 日志里面暂时没发现问题,能否抽空帮忙做个最小重现测试数据集发邮箱 845765@qq.com 非常感谢。

    1 回复
  • fangly 1

    已经发到您邮箱了,打开《很多嵌入》这个文档:

    image.png

    简述一下我的复现过程:

    我先是在这个页面搞了很多嵌入块,发现没问题

    然后我把所有被嵌入的内容中都加上引用块,就出问题了,回退到 1.4.6,没问题:

    image.png

  • 非常感谢老铁帮忙,已经定位到问题了,在 Issue #3372 · siyuan-note/siyuan 中修复。

    1 回复
  • fangly

    除了嵌入块和引用嵌套时的问题,还遇到一个卡死的场景,不知道两者是不是一样的问题

    我把鼠标放在引用块悬浮窗上,之后就卡死了:

    temp101.gif

    测试集:

    20210927211858cnulnll.zip

    打开《很多反链》这个文档。

    而且反链面板显示的速度非常慢,要等很久才能显示出来,感觉比 1.4.6 的时候慢了不少,不知道这个性能能不能优化一下

    1 回复
  • 我这里在开发环境用刚刚你提供的数据集测了下正常,应该是同一个问题:解析动态锚文本的时候数据库连接没关闭导致没有可用连接进行查询。

    性能问题暂时还不确定是否有影响,等下个版本发布看看。

    1 回复
  • fangly 1

    升级到 1.5.1 之后,嵌入块没问题了

    但我后面提到的鼠标放在引用块悬浮窗上的问题仍然存在,第一次放上去的时候会看到能显示,但是没有面包屑,这个时候已经假死了:

    image.png

    鼠标再放上去,就啥也没有了:

    image.png

    1 回复
  • 我这里用上次的测试集没能重现 😂

    1 回复
  • fangly

    新测试集发到您邮箱了

    把测试集里面的两个笔记本都塞到 data 文件夹里,然后把鼠标悬停在文档树中测试-数据集这个文档的块引用上,之后就假死了

    image.png

    1 回复
  • 感谢感谢,已经定位到问题了,下个版本修复。

    1 回复
  • fangly

    又发现一个可能导致假死的问题,测试集发您邮箱了(只有一个文档)

    首先 ctrl+alt+4 把一个标题变成普通段落,可以看到这时候左侧大纲中还没反应过来,这时候赶紧把列表转换为段落(要在大纲中还没发生变化的时候转换,手要快,如果大纲这时候已经变化了,即大纲第一行的"符号约定"已经没了,这时候很可能复现不了,当然有时候我没有按 ctrl+alt+4,直接把列表转换为段落也会假死),之后就假死了,这时如果没有假死,可以在这个文档上再 ctrl+z 撤回一下,之后应该也会假死:

    temp102.gif

    不过这个好像不是完全假死,出现假死状态之后,等很久以后会恢复正常,可能是性能问题

    目前主要是在列表中搞标题,以及列表转段落的过程容易出现假死状态,不止上面的复现方法。

    还有就是现在大纲的反应确实太慢了,在文档中修改标题层级后,大纲有时候要 10 秒才反应过来,而且在大纲反应变化的过程中我换到别的文档,大纲也不会变化到别的文档的大纲,而是一直卡着,我猜是某个地方阻塞了。

    还有假死会导致一个比较严重的问题,假死情况下仍然可以输入(但不能粘贴的东西),但是这个输入并不会保存到文件中,重启后写了的内容都会丢失。不知道这个问题能否防范,因为很多时候自己并不知道假死了,在文档里写了很多内容,然后突然程序崩溃重启,刚才写的内容都没了。

    1 回复
    4 操作
    fangly 在 2021-11-12 21:15:13 更新了该回帖
    fangly 在 2021-11-12 20:25:12 更新了该回帖
    fangly 在 2021-11-12 19:12:06 更新了该回帖
    fangly 在 2021-11-12 18:48:34 更新了该回帖
  • 应该是性能问题,在小库上面我重现不了,大库没做测试。

    目前对于较大列表的保存操作写入数据会比较慢,大纲还有退出等操作是阻塞的,需要等待数据写入以后才返回结果。较大列表的写入性能问题请关注 Issue #2548 · siyuan-note/siyuan

    1 回复
  • fangly

    回退到 1.4.6,在大库下,还是很顺畅的,大纲响应很快,也复现不出假死的 bug,所以这个假死问题和是小库还是大库应该没直接关系,和列表的写入性能应该也没直接关系,可以比较一下两者大纲响应的速度(其他条件都相同,都是在大库下):

    1.4.6:

    temp103.gif

    1.5.1:

    temp104.gif

    在 1.5.1 中,我关闭主笔记本,剩下测试笔记本,也就是在小库下,性能也没问题,大纲响应很快,我不太理解为什么只是打开一个和这个文档无关的笔记本,会影响这个文档的大纲的响应速度 😂

    是不是 1.4.7 中修改了什么东西,对性能造成了比较大的影响。像假死问题,以前从来没遇到过,1.4.7 之后经常出现,而且复现假死的方法有很多,一个一个复现排查估计有难度,假死的核心问题个人猜测在于性能,以前版本性能好,各种代码逻辑问题可能都触发不了,1.4.7 后性能变差了,导致很多问题暴露出来了,而性能变差的原因我猜测是 1.4.7 中的某个 issue 造成的

    1 回复
    1 操作
    fangly 在 2021-11-13 00:53:54 更新了该回帖
  • 最近的几个版本一直在改进数据库事务实现,但某些地方可能因为事务未关闭导致数据库连接泄漏。这两天也在检查代码,感觉应该补得差不多了,等发布以后继续帮忙测测看吧。

    1 回复
  • fangly

    假死情况目前还是存在,最后发给您的复现方法在 1.5.2 中依然能复现

    下面这个图中,我只是删除了这个文档中的所有内容,就假死了,我猜测是写入数据一直阻塞着:

    temp105.gif

    过了一段时间,弹出内核连接中断:

    image.png

    关掉思源,重启后,发现文档中的内容没有被删除,应该是没有成功写入数据

    复现这个假死问题的一个要点是“大纲的显示与文档真正的内容不匹配”的时候做一些操作,比如说之前的复现方法中,改变标题层级,在大纲还没有反应过来的时候,将列表转换为段落,此时一定会假死,如果大纲此时反应过来了,一般不会假死。

    而在小库下,大纲反应很快,因此很难做到大纲与文档真正内容不匹配,也就很难复现。

    “大纲的显示与文档真正的内容不匹配”这个当然是表面现象,本质肯定是其他原因。

    还有 1.4.7 之后大纲的反应速度在大库下明显比以前慢了很多,这也导致了 1.4.6 之前在大库下也没法复现,而 1.4.7 之后在大库下很容易复现上面的假死问题,说不定这个问题以前版本也存在,只是以前版本大纲反应太快了,没有人有那么快的手速可以在大纲还没反应过来的时候进行其他操作。“大纲的反应速度在大库下慢”这当然也是表面现象,本质应该也是有其他原因。或许可以往提高大纲反应速度的方向修复看看?

    1 回复
    3 操作
    fangly 在 2021-11-14 12:10:41 更新了该回帖
    fangly 在 2021-11-14 12:04:11 更新了该回帖
    fangly 在 2021-11-14 11:57:58 更新了该回帖
  • 麻烦把日志文件再上传一下,谢谢。

    1 回复
  • fangly

    log.zip

    应该是在这部分的时候假死的:

    image.png

    1 回复
  • 好的,这个问题我们会继续跟进排查的。

    3 回复
  • fangly

    我之前随便在一个新的工作空间试了下,忘了做了什么操作,日志中有以下记录,不知道能不能看出什么东西(前面几个 rebuilt database 是我主动重建索引的,我把一些东西复制到新工作工作空间,然后重建索引):

    I 2021/11/14 12:43:47 box.go:499: rebuilt database for notebook [20210820214849-sbwv4pi] in [13.83s], tree stat [count=295, size=8.4 MB]
    I 2021/11/14 12:43:51 box.go:499: rebuilt database for notebook [20210927211858-cnulnll] in [3.55s], tree stat [count=57, size=1.1 MB]
    I 2021/11/14 12:44:50 box.go:499: rebuilt database for notebook [20210820214849-sbwv4pi] in [15.37s], tree stat [count=354, size=9.4 MB]
    I 2021/11/14 12:44:54 box.go:499: rebuilt database for notebook [20210927211858-cnulnll] in [3.69s], tree stat [count=57, size=1.1 MB]
    W 2021/11/14 12:46:36 conf.go:370: data is writing
    I 2021/11/14 12:47:17 box.go:499: rebuilt database for notebook [20210820214849-sbwv4pi] in [63.57s], tree stat [count=704, size=22 MB]
    E 2021/11/14 12:47:32 database.go:1084: begin tx failed: database is locked
      goroutine 79128 [running]:
    runtime/debug.Stack()
    	D:/go1.17/src/runtime/debug/stack.go:24 +0x65
    github.com/siyuan-note/siyuan-src/kernel/sql.BeginTx()
    	D:/88250/siyuan-src/kernel/sql/database.go:1084 +0x51
    github.com/siyuan-note/siyuan-src/kernel/model.BuildBlockPath({0xc0083c8540, 0x16})
    	D:/88250/siyuan-src/kernel/model/blockinfo.go:187 +0x65
    github.com/siyuan-note/siyuan-src/kernel/api.getBlockBreadcrumb(0xc000ae4200)
    	D:/88250/siyuan-src/kernel/api/block.go:218 +0xf8
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/siyuan-note/siyuan-src/kernel/model.CheckAuth(0xc000ae4200)
    	D:/88250/siyuan-src/kernel/model/session.go:93 +0x467
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/gin-contrib/sessions.Sessions.func1(0xc000ae4200)
    	D:/gogogo/pkg/mod/github.com/gin-contrib/sessions@v0.0.3/sessions.go:52 +0x18d
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/gin-contrib/gzip.(*gzipHandler).Handle(0xc00066ef60, 0xc000ae4200)
    	D:/gogogo/pkg/mod/github.com/gin-contrib/gzip@v0.0.3/handler.go:60 +0x2ed
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/gin-gonic/gin.CustomRecoveryWithWriter.func1(0xc000ae4200)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/recovery.go:99 +0x82
    github.com/gin-gonic/gin.(*Context).Next(...)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/context.go:165
    github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc000502820, 0xc000ae4200)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/gin.go:489 +0x63e
    github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc000502820, {0x1441b08, 0xc000c6a1c0}, 0xc000ae4000)
    	D:/gogogo/pkg/mod/github.com/gin-gonic/gin@v1.7.4/gin.go:445 +0x1c5
    net/http.serverHandler.ServeHTTP({0x143dec8}, {0x1441b08, 0xc000c6a1c0}, 0xc000ae4000)
    	D:/go1.17/src/net/http/server.go:2878 +0x43b
    net/http.(*conn).serve(0xc000708000, {0x144cf00, 0xc000541410})
    	D:/go1.17/src/net/http/server.go:1929 +0xb08
    created by net/http.(*Server).Serve
    	D:/go1.17/src/net/http/server.go:3033 +0x4e8
    I 2021/11/14 12:47:43 working.go:94:
    

    现在我每次操作标题都得非常小心,要等大纲反应过来了才放心进行其他操作,不然很容易假死,而现在大纲反应太慢了,最近我对标题的操作又比较多,所以用起来比较心累 😂

  • fangly

    可以看下面这个录屏,我只是把一个三级标题变成一级标题(当然这对底层.sy 文件来说意味着要大改结构),大纲反应过来要等 1 分多钟(这个视频有 1 分多钟,在中间可以看到任务管理器中思源 CPU 占用非常高,大纲反应过来之后 CPU 占用迅速降低):

    这个要在大库下才能复现,小库下复现不了

    1 操作
    fangly 在 2021-11-14 14:15:22 更新了该回帖
  • fangly

    除了大纲的反应特别慢,反链面板的反应也特别的慢,对于一个有 100 多条反链的文档,引用块悬浮窗一秒不到就出来了,而反链面板却要 5 秒以上才能出来,我不太理解为什么引用块悬浮窗那么快而反链面板却要这么久,两者本来应该差不太多吧

  • 下个版本会稍微进行一些参数上的优化,性能应该会和 v1.4.6 接近。 Issue #3405 · siyuan-note/siyuan

    1 回复
  • fangly

    在标题操作上的性能和 v1.4.6 相比还是差得有点多:

    v1.4.6,大纲是秒变化:

    temp110.gif

    v1.5.3,大纲要 50 秒才能变化,在等待大纲变化的期间,能写东西,但是所有引用块都失效,切换到其他文档大纲也不会变化,处于“半假死”状态:

    1 回复
  • 下个版本重写了数据索引,编辑更新慢的问题需要等数据索引稳定以后再优化。

    这次重构主要是降低数据索引内存使用和提升索引性能,会先发布内测版,老铁有空的话可以帮忙跟进测试下。

请输入回帖内容 ...

推荐标签 标签

  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖 • 5 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 175 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 588 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 605 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 268 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 685 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 498 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖 • 1 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 466 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    16 引用 • 53 回帖 • 123 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 592 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 3 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 45 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 512 关注
  • 倾城之链
    23 引用 • 66 回帖 • 100 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 40 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 383 回帖 • 4 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    51 引用 • 190 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 455 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 18 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 345 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 6 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    331 引用 • 614 回帖
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖