danny0838 / webscrapbook

A browser extension that captures web pages to local device or backend server for future retrieval, organization, annotation, and edit. This project inherits from legacy Firefox add-on ScrapBook X.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Browser crashes when downloading too many files during a capture

GeeRobin opened this issue · comments

环境信息:
webscrapbook版本:2.1.0、2.0.4
浏览器:Google Chrome 116.0.5845.188(正式版本) (64 位)、Google Chrome 117.0.5938.63(正式版本) (64 位)
操作系统:Microsoft Windows 10 22H2 (操作系统内部版本19045.3448)

我使用webscrapbook时间挺长的,而且我的使用场景比较严苛,相当于给webscrapbook做压力测试了。。
我使用场景的特别之处在于:我撷取的页面数据量比较大,撷取配置如图:
20230916162016
我撷取的页面是个社交网站,网站有个页面可以显示我关注的所有博主发的信息,关注的博主越多,该页面显示的消息就越多。我一般半个月(15天)撷取一次,将博主门最近半个月发的消息保存下来,每次撷取大概有1000~2500个文件(都是些字体文件、CSS文件、图片、HTML文件之类文件),有时文件数比较多(文件数目多达3500、3800、4600个),撷取一次的数据量在30M到100M之间,目前最大的单次撷取数据量是140M。。
以前撷取都挺正常的(虽然撷取时CPU、内存占用比较高),但从9月开始,Chrome浏览器开始崩溃(crash),撷取简单页面没问题,毕竟数据量不大。一旦我撷取大网页(比如我上面提到的社交网站的页面)浏览器就会crash,导致webscrapbook无法完成撷取。

一开始我以为是webscrapbook的问题,于是我把版本从2.1.0换成了之前可以正常撷取的2.0.4,但是没效果,浏览器依然crash。我又怀疑是浏览器的问题,于是将Chrome 从116.0.5845.188升级到117.0.5938.63,可浏览器依然崩溃,webscrapbook无法完成撷取。
我不知道Chrome为啥会崩溃,我唯一观察到的现象是,Chrome崩溃时,Chrome开启的进程数特别多,如下图,开启了900多个进程(有时甚至1000多个):
20230916162309

不知道是不是因为Chrome开启的进程太多了以至于超出Chrome的承受范围进而导致崩溃。。
我试过调整chrome://flags/页面的Parallel downloading选项,据说这个选项可以开启Chrome多线程下载,于是我把该选项从Enabled改成了Default,我觉得改成了Default,Chrome应该就不会打开那么多进程了吧。可是,很遗憾,还是不行,Chrome依然崩溃。。
我现在彻底没办法了,只能求助大佬分析一下,这究竟是Chrome的问题还是webscrapbook的问题???

================

環境資訊:
webscrapbook版本:2.1.0、2.0.4
流覽器:Google Chrome 116.0.5845.188(正式版本) (64 位)、Google Chrome 117.0.5938.63(正式版本) (64 位)
作業系統:Microsoft Windows 10 22H2 (作業系統內部版本19045.3448)

我使用webscrapbook時間挺長的,而且我的使用場景比較嚴苛,相當於給webscrapbook做壓力測試了。。
我使用場景的特別之處在於:我擷取的頁面資料量比較大,擷取配置如圖:
20230916162016
我擷取的頁面是個社交網站,網站有個頁面可以顯示我關注的所有博主發的資訊,關注的博主越多,該頁面顯示的消息就越多。我一般半個月(15天)擷取一次,將博主門最近半個月發的消息保存下來,每次擷取大概有1000~2500個檔(都是些字體檔、CSS檔、圖片、HTML檔之類檔),有時文件數比較多(檔數目多達3500、3800、4600個),擷取一次的資料量在30M到100M之間,目前最大的單次擷取資料量是140M。。
以前擷取都挺正常的(雖然擷取時CPU、記憶體佔用比較高),但從9月開始,Chrome流覽器開始崩潰(crash),擷取簡單頁面沒問題,畢竟資料量不大。一旦我擷取大網頁(比如我上面提到的社交網站的頁面)流覽器就會crash,導致webscrapbook無法完成擷取。

一開始我以為是webscrapbook的問題,於是我把版本從2.1.0換成了之前可以正常擷取的2.0.4,但是沒效果,流覽器依然crash。我又懷疑是流覽器的問題,於是將Chrome 從116.0.5845.188升級到117.0.5938.63,可流覽器依然崩潰,webscrapbook無法完成擷取。
我不知道Chrome為啥會崩潰,我唯一觀察到的現象是,Chrome崩潰時,Chrome開啟的進程數特別多,如下圖,開啟了900多個進程(有時甚至1000多個):
20230916162309

不知道是不是因為Chrome開啟的進程太多了以至於超出Chrome的承受範圍進而導致崩潰。。
我試過調整chrome://flags/頁面的Parallel downloading選項,據說這個選項可以開啟Chrome多執行緒下載,於是我把該選項從Enabled改成了Default,我覺得改成了Default,Chrome應該就不會打開那麼多進程了吧。可是,很遺憾,還是不行,Chrome依然崩潰。。
我現在徹底沒辦法了,只能求助大佬分析一下,這究竟是Chrome的問題還是webscrapbook的問題???

1. 請提供完整擷取選項以利進一步除錯。可到 擷取分頁為 > 進階設定 複製

2. 可能和瀏覽器套件架構與記憶體管理機制有關。請試試用 Edge 或 Firefox 是否仍會發生同樣問題。Chrome 請用乾淨設定檔(建立新的使用者且不安裝 WSB 以外的套件)試試

大佬的恢复速度很快啊,非常感谢。。
1,补充信息;
進階設定.txt
20230916162016
2,我试过 Edge 或 Firefox ,会出现同样的问题;
3,Chrome 请用干净配置文件(建立新的使用者且不安装 WSB 以外的套件)试试。这个我没试过,我马上试一下。。

额,不是上面的图片,搞错了。。

这个才是。。
20230916174236

建立新的使用者且不安装 WSB 以外的套件,
经测试,Chrome浏览器不会直接崩溃退出,Chrome GUI界面还在,不会退出,但是已经卡死了,点界面上的任何按钮都没有反应。总共需要下载下载840个文件(我特意减小了下载量),有674个文件下载不了,一直是.crdownload格式:
Image 1

撷取过程中创建了808个进程:
Image 2

平时我一般使用“获取分页”、“批量获取所有分页”这两个选项进行撷取:
Image 4

本次测试我新建用户并安装WSB之后,使用WSB的默认配置,使用“获取分页”选项进行撷取:
Image 3

=============

建立新的使用者且不安裝 WSB 以外的套件,
經測試,Chrome流覽器不會直接崩潰退出,Chrome GUI介面還在,不會退出,但是已經卡死了,點介面上的任何按鈕都沒有反應。總共需要下載下載840個檔(我特意減小了下載量),有674個檔下載不了,一直是.crdownload格式:
Image 1

擷取過程中創建了808個進程:
Image 2

平時我一般使用“獲取分頁”、“批量獲取所有分頁”這兩個選項進行擷取:
Image 4

本次測試我新建用戶並安裝WSB之後,使用WSB的預設配置,使用“獲取分頁”選項進行擷取:
Image 3

目前看起來似乎是 Chrome 對大量並行下載缺乏保護機制,因此下載的檔案數量太多時會造成 CPU 和記憶體超出負荷,但我測試 Firefox 似乎沒有同樣問題。

嘗試加上並行下載的數量限制,應該可以避免此問題。請下載 devel 分支的原始檔並將 src 目錄載入為測試套件試試是否仍有同樣問題。

   经过几个小时的测试,使用devel分支的原始文件并将 src 目录加载为测试套件确实修复了问题,Chrome浏览器不再崩溃,CPU和内存占用也比以前明显降低。非常感谢大佬的及时响应,我的问题迅速得到了解决。
   我建议将并行下载的数量限制做成一个配置项并添加到选项页面,让用户自己配置并行下载数,毕竟大家的电脑性能不一样,有的用户可能是最近刚买的高性能电脑,而其他用户的可能是10年的性能不好的老电脑。如果用户可以自行配置并行下载数就可以适应不同性能的电脑,这可以大大提高WSB的使用体验,也可以扩展WSB的使用场景。
   之前我在Google搜过Chrome浏览器启动参数,希望找到一个可以限制Chrome浏览器进程数的参数。我确实找到一个参数(参数名忘记了),不过很遗憾,这个参数好像不起效,不知道是不是新版本的Chrome弃用了该参数,要以前的老版本才支持该参数。

    ===目前看起來似乎是 Chrome 對大量並行下載缺乏保護機制,===
    不知道是不是最近Chrome浏览器有重大更新,因为以前是能正常撷取的。。。。我觉得那你可以给Chrome提一个issue,让他们关注一下这个问题
    ===但我測試 Firefox 似乎沒有同樣問題。===
    针对您提到的这点,我重新在Firefox浏览器里测试了一遍。当撷取数据量不多时可以,但是撷取数据量一旦变大后就不行了,Firefox浏览器会崩溃,和我之前的测试结果一样。。(本次测试用的是2.1.0,不是devel分支下的 src 目录)

=========

    經過幾個小時的測試,使用devel分支的原始檔並將 src 目錄載入為測試套件確實修復了問題,Chrome流覽器不再崩潰,CPU和記憶體佔用也比以前明顯降低。非常感謝大佬的及時回應,我的問題迅速得到了解決。
   之前我在Google搜過Chrome流覽器啟動參數,希望找到一個可以限制Chrome流覽器進程數的參數,我確實找到一個參數(參數名忘記了),不過很遺憾,這個參數好像不起效,不知道是不是新版本的Chrome棄用了該參數,要以前的老版本才支援該參數。
   我建議將並行下載的數量限制做成一個配置項並添加到選項頁面,讓使用者自己配置並行下載數,畢竟大家的電腦性能不一樣,有的使用者可能是最近剛買的高性能電腦,而其他使用者的可能是10年的性能不好的老電腦。如果使用者可以自行配置並行下載數就可以適應不同性能的電腦,這可以大大提高WSB的使用體驗,也可以擴展WSB的使用場景。

    ===目前看起來似乎是 Chrome 對大量並行下載缺乏保護機制,===
    不知道是不是最近Chrome流覽器有重大更新,因為以前是能正常擷取的。。。。。我覺得那你可以給Chrome提一個issue,讓他們關注一下這個問題
    ===但我測試 Firefox 似乎沒有同樣問題。===
    針對您提到的這點,我重新在Firefox流覽器裡測試了一遍,當擷取資料量不多時可以。但是擷取資料量一旦變大後就不行了,Firefox流覽器會崩潰,和我之前的測試結果一樣。。(測試用的是2.1.0,不是devel分支下的 src 目錄)

可否協助確認 devel 版在 Firefox 能否正常運作?以及你的 Firefox 版本?

有做成選項,可匯出/匯入或從進階選項更改,目前暫時未放在 GUI,因為一般使用者應該沒有更改的需求。

Chrome 的部分比較麻煩,可能你要先確認是在哪個舊版本能正常運作。

今天测试所用的Chrome版本:
Image 5

本issue第一个Comment我提到我用的Chrome版本是116.0.5845.188、117.0.5938.63,之所以会有2个版本是因为一开始的版本是116.0.5845.188,后面由于撷取失败,于是我来到chrome://settings/help页面查看Chrome版本,可是只要我一来到chrome://settings/help这个页面,Chrome就会自动检查并升级到新版本,于是我的Chrome升级到了117.0.5938.63。我现在的版本是117.0.5938.89同样是因为我在chrome://settings/help页面查看版本时导致Chrome从117.0.5938.63升级到117.0.5938.89.。

我的Firefox版本:
Image 6

Firefox安装本地插件和Chrome不一样,Chrome下我可以加载src目录,但在Firefox里不行,它必须的加载一个文件,后缀可以是*.xpi、.jar、.zip。我试了把src目录压缩成webscrapbook-devel-src.zip,但是Firefox无法加载这个我打包的zip文件。
Image 7

Image 8

Image 9


今天測試所用的Chrome版本:
Image 5

本issue第一個Comment我提到我用的Chrome版本是116.0.5845.188、117.0.5938.63,之所以會有2個版本是因為一開始的版本是116.0.5845.188,後面由於擷取失敗,於是我來到chrome://settings/help頁面查看Chrome版本,可是只要我一來到chrome://settings/help這個頁面,Chrome就會自動檢查並升級到新版本,於是我的Chrome升級到了117.0.5938.63。我現在的版本是117.0.5938.89同樣是因為我在chrome://settings/help頁面查看版本時導致Chrome從117.0.5938.63升級到117.0.5938.89.。

我的Firefox版本:
Image 6

Firefox安裝本地外掛程式和Chrome不一樣,Chrome下我可以載入src目錄,但在Firefox裡不行,它必須的載入一個檔,尾碼可以是*.xpi、.jar、.zip。我試了把src目錄壓縮成webscrapbook-devel-src.zip,但是Firefox無法載入這個我打包的zip檔。
Image 7

Image 8

Image 9

把 manifest.json 刪除再把 manifest-firefox.json 更名為 manifest.json,然後 Firefox 選擇載入該 manifest.json 檔案即可

Chrome 要測試舊版本的確很麻煩(某方面來說也不太需要),可能要找免安裝的 Chromium 比較好測試

嗯,确实。。Chrome官方好像也不提供历史版本的Chrome下载。。。

image
===Chrome 要測試舊版本的確很麻煩(某方面來說也不太需要),可能要找免安裝的 Chromium 比較好測試===
刚试了下,这样不行。

你要選擇除錯 > 載入暫用附加元件

圖片

圖片

一開始我就試了這個選擇除錯 > 載入暫用附加元件,不過當時我並沒有把manifest-firefox.json改成manifest.json,所以報錯。剛剛你更我說要把manifest-firefox.json改成manifest.json我沒有測試這個選擇除錯 > 載入暫用附加元件,慚愧慚愧。。

我在Firefox 和 Edge流覽器都試用了devel 版,都可以正常擷取。。

另外,您提到
===有做成選項,可匯出/匯入或從進階選項更改,目前暫時未放在 GUI,因為一般使用者應該沒有更改的需求。===
Image 10
图中幾個參數看著都不像並行下載數的選項啊

看來限制同時下載數量就解決了,會納入新版 2.2.1。

CHANGELOG 有說明,調整 capture.downloadWorkers 即可,不過一般應該沒有更動的必要。