在点心云交流群里经常看到有朋友问“为什么我的点心云pcdn跑不起来”,整理一些解决思路,不一定对,大家当个乐子看就行了,因为我手上的样本实在太少了。

先交代下实验的机器情况:
a.移动家庭宽带两条,一条300上,一条80上(全部桥接)。

b.畅网j4125 四网口i210双内存版本,内存三星笔记本内存2666单条8g*2,系统盘msata265g,双盘位硬盘插座一台,3.5寸wd黑盘亮块,一块1t,一块2t,虚拟机操作系统pve最新版。

c.火神d1581标准版,内存三星ddr3服务器内存1600单条16g2,系统盘sata协议m.2 256g,缓存盘nvme 2t一块(板载nvme m.2接口),金泰克256gssd两块(硬盘盒外挂,usb3.0),3.5寸黑盘两块,一块1t,一块2t(板载sata3.0口),悍将980 ssd 1块(板载sata3.0口),猛将500g ssd 一块(板载sata3.0口),板载螃蟹网卡81111,惠普flr331四网口网卡*1。

以下讲的东西请大家自动忽略调度问题,因为这个东西不是我能掌握的。
先说结论:大多数问题集中在cpu性能不够或者io(硬盘)性能不够。

a. 用来跑pcdn的计算机设备最基本的由主板、cpu、硬盘、内存、电源,网络组成,点心云的系统是用的64位的linux然后通过docker执行的任务。一开始我们刚上机没多久就能跑满我们的宽带,然后后面越跑越慢,这是为什么呢?一开始能跑满,说明调度,cpu,内存、电源、主板,都没问题,那么我们的短板必然是在io的输出输出上,也就是我们的硬盘。一开始的时候,我们硬盘缓存的数据都不会很大,系统的随机读写操作对我们的硬盘压力不算大,但是随着时间的推移,缓存越来越多,点心主程序寻找相应的缓存数据的时候需要我们的硬盘反应更快,这样就加剧了硬盘的负担。(举个不恰当的例子,9个红色小球,1个粉色小球,我们把粉色小球挑出来几乎是一瞬间的事,那如果我们有99个红色小球,然后需要挑出一个粉色小球呢,是不是对我们大脑和眼睛负荷更大一些)缓存越多,对硬盘负荷更大。反面例子如下:

针对以上问题,现在给出解决方法如下:

(1).起初购买硬盘的时候一步到位选购性能好一点的盘(小水管300上以内可以只上机械,大水管几个g的我还是建议上纯u2或者nvme,因为有些普通的ssd对大水管来说根本不行,中等水管1g左右可以上纯普通小厂ssd或者ssd加机械)。这里很多朋友还有个误区,跑v聚合觉得达到官方要求的一两t nvme加点机械就完事了,然后跑的不好了就来群里问,一看硬盘延迟都起飞了,磁盘负载都200%了,完了你跟他说盘不行让他换,他就跟你犟官方要求2tnvme再加一条线对应600g机械就行了,你不管怎么说他就说官方要求的,我只想说这种人不是傻就是蠢。还有这里提一点,我两块黑盘跑300上磁盘负载都到90%,延迟50ms左右了,这个时候上行基本就在150左右跑不上去了,算是给大家一个参考。

(2).买盘的时候尽量买单盘小一点的,比如2t或者1t的(高性能u2或者nvme请自行判断),一个机器多上两块小容量的盘分摊磁盘负荷

(3).如果你的点心机器想用混合盘,ssd加机械这种,请使用虚拟机,比如pve或者esxi,请不要对ssd直通,ssd直通过后点心系统会把ssd识别成ssd,如果不直通,则识别成hdd。点心系统是有ssd做加速盘,机械做缓存盘这么一说的,但是开发者的技术并不怎么样,很容易出现机械盘要累死了,磁盘负载都100多了,延迟50ms以上了,结果加速盘还一动不动,一看加速盘换存量20g,别人死命干,你在死命看。但是如果我们把ssd通过虚拟机让点心系统识别成hdd呢,系统就会把两块盘格式化为zfs 格式的一块软raid,然后进行缓存的时候就会雨露均沾,基本达到1:1,这样的话ssd会更好的分担机械的压力。(肯定有朋友问嗨呀,我ssd都干成机械了那我直接买机械不就好了,不是这样滴!ssd识别成机械那他的性能也还是ssd的性能,还有看不明白的我只能说你上学严重偏科,语文学的是一塌糊涂)

b. 内存是用来交换数据的,读写速度非常快。如果我们给的内存不足,假设我们给的内存非常小,那么必然会造成linux内核自动杀死某些进程以确保linxu系统稳定运行。而且前面说了,内存是用来交换数据的,内存太小必然会引起linux系统频繁读写硬盘,加剧硬盘负荷。有些群友经常甩出一个报错图,写着kill….这种就是内存太小引起的,我们想一下,任务进程都被系统杀死了你还跑个锤子!
针对以上问题,现在给出解决方法如下:

加内存!!!

c. 一个多核心cpu可以运行多个进程,一个进程可以有多个线程,同一进程内同一时间点上只允许一个线程运行(感兴趣的朋友可以查查进程、线程、协程、并发、并行)。多核心cpu可以在一个时间点上同时运行多个进程,但是,我们的系统是抢占式调度,如果我们要运行的任务非常多,而一个核心同一时间点只能运行一个线程,那么其他线程就要等着,所以这种肯定也跑不好啦。症状如下图所示:

针对以上问题,现在给出解决方法如下:

a. 物理机的朋友请换机器
b. 虚拟机的朋友请减少同一物理机上虚拟机的数量,或者给虚拟机更多的核心数量。这里不得不提一下,比如我机器10核心20线程,有些朋友以为我分给a虚拟机的核心b虚拟机就不能用了,不是这样说呀,他跟内存不一样,内存是分一点少一点。我一般都会把所有核心都给虚拟机,想怎么跑怎么跑,想怎么抢占就怎么抢占,反正都给你了,抢不到不能怪我吧?pve下请勾选host模式,如下图所示。

上面是授人以鱼,现在授人以渔。我们怎么知道我机器的性能短板在哪呢?现在我们就聊一聊这个问题.

a. Pve用户可以进行如下操作:
进入pve后台,然后输入 apt update 然后安装sysstat,输入apt-get install sysstat

常用参数:

-h 适合人类阅读方式
  • 1
-m 以 M 为单位显示
  • 1
-x 显示详细信息
  • 1
-p 显示磁盘和分区情况
  • 1

实战:

iostat -p -h

  • iostat -x -m 1 5

参数补充说明:-x -m 是以m为单位,1表示时间间隔,5表示显示次数,显示次数太少会出现不准确的情况。

我们需要注意的显示参数有:
(1) rMB/s 每秒读取量
(2) wMB/s 每秒写入量
(3) r_await 读延迟
(4) w_await 写延迟
(5) %util 磁盘负载

再来看看其他的情况,如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

非pve用户可以去点心云app进行查看或者像上面讲的有报错处理报错,有io短板就去处理io短板问题。
————————————————

By amble

拥有的都是侥幸,失去的都是人生。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注