NAS 相册性能问题排查
去年有一笔非常失败的消费,是购买了一台颜值不错但用起来并不好用的 NAS,除了刚收到货还没开始用时给我带来购物和折腾的欣喜之外,往后带来的都是痛苦。考虑到这台机器的价格比同类产品要高上一截,这绝对是我去年最失败的一笔消费。
这台 NAS 的宣传里,说它并非一台普通的 NAS,而是一台牛逼的家庭服务器。但我是一个普通用户,要用的就是普通 NAS 的功能,最重要的自然是网盘和相册。事实上最初的手机端软件里,也是把网盘和相册这两个应用入口做很大放在首页上,只是后来改版了失去了这个方便的入口,跟其他应用混在一个入口里了。
一路折腾下来,经历了无数崩溃的时刻,案例太多在此不一一列举,之后可能会写几篇来讲述遇到的各个层面的问题,本篇只说一下我排查其相册应用性能问题的过程。
最初是某天我播放了一下视频,发现视频非常卡顿,几乎可以说不能正常播放,哪怕是我多年以前购买的 N1 电视盒子改造的小 NAS,也不会出现这种问题。经过在几台设备上的测试,排除了是我网络的问题之后,联系了客服群。
他们的工程师安排了一次远程连线,排查问题的过程中跟他聊天我了解到,这个相册对网盘是高度依赖的,我看到的表象是相册性能垃圾,实际上是网盘那边有问题。研究了半天确定确实有问题之后,工程师回去自己研究了,之后告诉我他们已经复现了问题,并会进行软件层面的优化来解决问题。
然而这一等就是小半年,我以为他们已经把这个事情给忘记了。正当我准备闲下来找他们时,客服群里突然通知我说最新的版本解决了问题,让我更新系统。怀着期待的心情我去更新了系统。
不出意外的是,更新之后可以说没有任何改善,这我就很生气了,在客服群里艾特了他们老板。我说你们宣传说相册缩略图 1s 加载不出来退款不退货,现在这么久过去了,别说 1s 了,是根本就加载不出来,这机器我都买了半年多了都不能正常使用。而且随便一滑动相册,机器的 CPU 就接近满载了,如果是这样的性能,哪怕能正常使用,机器也撑不了几年。
老板说一定会解决,不论是退款、换一台还是优化好软件,一定会给我个说法。他们说回去马上就优化,一周之内给我推送一个更新,就能解决问题了。然而一周,两周,三周之后都没有任何消息,第四周又在我准备联系他们时,通知我说升级一下网盘版本,这次好多了。我升级了之后发现确实有所改善,不过问题仍然存在,但我当时很忙没有时间仔细测试。等到一周之后的周末我有时间了才测试一下,就更生气了,依然是缩略图半天加载不出来,视频播放依然会卡顿,而且滑动相册时间线时依然会把 CPU 拉到接近满载。
于是我说这么着吧,我申请退款吧,不想再一遍一遍给你们当测试员了。他们老板倒是也爽快,直接跟客服说这台机器确实有问题,退款吧,并且让工程师不用分析我的日志了。
他们老板对问题的分析是这样的:
我一个月前和工程师讨论过,我们专门分析过您的机器,就是因为这个图太多了,这种图太多以后,它这个解析压力很大。如果你是安卓的话,问题不大。苹果的话,它这个专有格式,它没有一个加速库。然后这个型号又是机械盘,当你的图片特别多,机械盘读写特别频繁,然后要用CPU去解它的时候,就会压力很大。压力很大的时候,你现在看缩略图就看不到了
工程师专门用了两天晚上去优化,确实这个很难
主要是它还是个机械盘,机械盘在大量读写文件的时候,它的这个磁头就会频繁的动,IO就扛不住了
我们下一代产品的话,这种情况基本上就消失了,因为下一代是全固态
我并不懂技术,但是我折腾过很多电子垃圾,我确信这台机器的性能绝对不可能解析这点图片都不行。首先大部分 NAS 都是机械盘,其次这台机器的 CPU 性能远超市面上绝大部分 NAS 的 CPU,甚至可以说数倍于普通 NAS 的 CPU。
于是我花了一点时间做了两个测试,基本上证明了我的猜测。
第一个测试是我把整个相册里所有的照片全部删除了,只保留了几十个 pocket 3 拍摄的视频。这样就保障了,一没有任何一张动图,二是总文件数只有几十个,数据量非常小。就在这样的情况下,滑动相册时间线依然需要花很长时间才能把视频封面的缩略图展示出来。这就证明了大量缩略图不是问题的根本。
第二个测试花费的时间比较长,分为了几个步骤。
首先是我重新用 NAS 自带的相册上传了整个手机的相册里的几万张照片,这些照片默认是存放在 NAS 自带的网盘里的。然后安装了 immich 这个开源相册软件,把网盘里的相册文件夹作为外部库挂载到 immich 上。immich 建库花了很长时间,大概两天把,期间 CPU 一直处于接近满载状态。建库完成后,在 immich 里浏览相册,效果已经比自带相册好很多了,但依然会有缩略图加载缓慢、CPU 持续高负荷等问题。
然后,我把这个外部库删除,用 codex 写了个脚本把相册迁移到 immich 的内部库里,此时相册的存放位置就不是在 NAS 自带的网盘里了。这个迁移过程大概也花了两天时间,由于迁移的很慢,建库过程基本上能够随着迁移过程同步完成,所以迁移完后没多久建库也完成了。
此时,在 immich 里浏览相册,就没有任何性能问题了,不管我已多快的速度滑动时间线或者对照片进行翻页,缩略图几乎都会瞬间加载出来,CPU 也只是极偶尔会瞬时飙到 10% 以上,但是马上就会落回到几乎没有负载的状态,CPU 温度也没啥波动。
对于 live 图,在时间线上鼠标悬浮在上面就会立即进行预览播放,而长视频也不会有任何卡顿。这样的速度才符合我对一个本地局域网里的相册的性能期待。
至此第二步测试已经证明了,这台机器的性能看个照片绝对不存在任何问题,问题指向了 NAS 自带的这个网盘。
如此简单的测试就能发现问题,我相信厂家也是知道问题根源的。我猜他们跟我说的什么 live 图太多、机械盘 IO 瓶颈之类的,只是一种对消费者的话术罢了。
很大概率是因为,他们在技术路线的决策上处于某种原因选择了相册依托于网盘的路线,这个路线其实好处挺明显的,比如用户可以直接在网盘里管理照片,方便且有掌控感,不像 immich 我并不知道照片文件放在哪里。但是又不知为何这个网盘的性能不佳,于是导致了我遇到的这种令人崩溃的问题。