爱吱声

标题: 阿里云排雷 [打印本页]

作者: 可梦之    时间: 2023-5-17 14:48
标题: 阿里云排雷
喷了一下阿里云
! S3 R% k& Y' ]; |
6 N  D9 P" S) W8 I" q0 l$ X在GPT4的帮助下,迅速找到了问题根源。; n( C8 {8 ~% p" u. C
) G- C8 ~" g' S; p. z# C
我的问题是:Ubuntu22.04中,kswap进程启动后,机器就卡死了。swap空间一点没占用。可能是什么问题?, t+ t0 n  a3 C, i; [; @
1 x4 g; U5 t- k8 D
GPT4的回答是: : G8 B# G% j: ?, o# c3 @
$ _; |9 D2 m6 M( T& Z
在 Linux 系统中,kswapd 是内核线程,它的主要职责是在系统内存压力大的情况下回收(释放)内存,以便给新的进程提供内存空间。它通过将内存中的数据移到 swap 空间(也就是硬盘)来实现这个功能。如果你看到 kswapd 进程占用了大量的 CPU 时间,并且系统变得非常缓慢,那可能是内存压力过大导致的。
- C' D0 t9 [/ {& o
- X" g  x/ s& g& M) H然而,你提到 swap 空间没有被占用,这就比较奇怪了。这可能是由于以下几种情况导致的:5 V+ \# l% I6 z5 ?

/ [+ d0 D6 N5 I- M内存泄漏:有一个或多个进程可能在不断地消耗内存,但没有正确地释放它。你可以使用 top 或 htop 命令来检查哪个进程占用了大量的内存。" T% r8 M3 T$ m' a# N( {( c

6 l7 C0 a/ ?8 X# HSwap 使用被限制或禁用:在某些情况下,系统可能被配置为尽量不使用 swap 空间。你可以通过 cat /proc/sys/vm/swappiness 命令来查看 swappiness 参数的值。这个值的范围是 0 到 100,数值越大,系统使用 swap 的可能性就越大。如果这个值非常低,你可能需要提高它。* p5 B' x/ n5 T1 {1 r0 r& ~
- D$ u( s; j/ B
错误的内存管理:在某些罕见的情况下,可能是由于内核的错误或硬件问题导致的内存管理问题。在这种情况下,你可能需要升级内核或检查硬件。1 v: o! c" a: A$ {4 j

2 @  n3 q, M, g7 Y% t% V( d为了进一步排查问题,你可能需要更详细地监控系统的内存使用情况,并检查相关的系统日志。你也可以尝试使用一些内存管理和优化工具,如 earlyoom 或 nohang,来自动处理低内存情况。如果问题持续存在,你可能需要寻求专业的技术支持。
. j' A) ~$ p, {$ Z

2 J6 V- V9 C5 L% _% S4 X5 s我在Google中,后来找到正确关键字,在stackoverflow也找到正确答案:https://askubuntu.com/questions/ ... taking-a-lot-of-cpu+ ^8 v, e9 t. s7 f1 g# l

5 y% M( @6 k( h% ^3 e0 P在阿里云中,swappiness数值是0,也就是,永远不要使用swap分区。所以虽然我设置了swap,但是内存根本不会存到swap里,kswapd进程自己都拿不到内存。把最后一个bit的内存榨干后,系统完全当机。( x2 r! U. B* w8 u' e* X4 K# S9 o
2 z: W" ]9 Y9 o* O! J0 B: q
我修改这个数值为60后,就没有问题了。swap分区开始工作,ssh也可以连上。
( S1 a3 _- @9 ?! {/ n! p# _  ]: W. N* ^0 i1 B
但是,这个数值在其他Ubuntu系统中都是60,不管是22.04/20.04/18.04,不管是AWS,ServaRICA还是我自己的服务器。阿里云的为什么这么特殊呢?
  B9 W& A4 e" \+ C- m1 p4 y) I9 b  ^" U! G' s' y
最后在/etc/sysctl.conf配置文件中,第一行赫然写着 vm.swappiness=0。而在其它系统中,配置文件里都没有这个设定。
/ `+ }# h& \$ N8 D: O: H
" v$ n0 M  X' ^2 T* ~阿里为啥要改Ubuntu的默认配置?搜索了一下,在Google找到了阿里云的官方指导:https://developer.aliyun.com/article/1151641。页面虽然已经404了,但是Google cache还能看到:在服务器和容器平台建议关闭SWAP,避免内存交换影响服务器性能,甚至引发数据丢失。
4 E( o) w1 |- h' z& A! a( |) d# }. X: t# |# R( A: M+ a1 A% ]2 L
但是,我们知道,不管你内存多大,都要开启swap。毕竟谁也不能保证你的内存是足够大的。自己家里机器随便折腾没事,服务器要24x365在线的。阿里云为什么这么反人类呢?我觉得有一个帖子说的对:“借此让用户购买更大的内存!”
' R8 C/ W; v: @: l5 c- j7 q& _% v0 [5 }  _/ }: O5 A
喷完了,还要继续搞明白node为啥占这么多内存?我看node的进程数越来越大,貌似在不停的fork。当然也可能是内存泄露,swap分区最终也被占满了。% D4 l5 s% ?! |3 h4 ?6 N

$ E: i- Z0 V$ R# h2 c0 _! [9 L8 b
作者: 勤劳工作的猪    时间: 2023-5-17 15:01
猫腻真不少
作者: 老友    时间: 2023-5-17 16:24
草得嘞,阿里云这么流氓?很早很早以前玩solaris的时候,建议swap分区配置成物理内存的2~3倍。
作者: straw    时间: 2023-5-17 19:21
我们那种1T2T内存的机器,连swap都不建了。
. |: I6 j: ^" C6 A$ v一般情况下swap还是要建的。当然太大也没意思,有个10g也就够了吧
; r5 S" z: n) s1 x6 F
作者: 可梦之    时间: 2023-5-18 07:01
straw 发表于 2023-5-17 19:21" ~# i' Y" o9 ]) v
我们那种1T2T内存的机器,连swap都不建了。" i: u" {6 G7 j$ {& N. x
一般情况下swap还是要建的。当然太大也没意思,有个10g也就够了 ...
4 O" ^. q# `: B$ ]& ^
你可以默认不建swap分区,但不能偷摸让我建立了swap分区也不能用。我很难用善意去揣度他们这么折腾的目的。
作者: 季侯    时间: 2023-5-19 15:59
这个不得不说冤枉阿里云了,之所以将vm.swappiness默认设置为0,纯粹是因为技术原因。因为在云环境下,对磁盘的访问其实是通过网络访问分布式存储。如果使用swap,那么很多服务端软件的磁盘io变成了网络io,性能会急剧下降,这个对企业应用来说是不可接受的。
+ Q( ?% I$ U; \/ L. {  w  c: k0 _, s/ m0 d- U0 b+ Z4 |% d& B
这个设置貌似ecs刚上线时候没多久就确定了,应该还参考了ec2的设定,时间太久远,有点不记得了。另外阿里云ecs的帮助文档里面应该有关于这方面的说明。
作者: 可梦之    时间: 2023-5-19 19:16
季侯 发表于 2023-5-19 15:59
9 w: s% a% H" i( N$ ~这个不得不说冤枉阿里云了,之所以将vm.swappiness默认设置为0,纯粹是因为技术原因。因为在云环境下,对磁 ...
4 S- v% X7 F, V6 A, k4 Q% @3 l2 x
这个要商榷。现在网络数据是非常快的,尤其是同一机房内部,千兆起步。速度可能比一般的硬盘还快。我当初将DB服务器分离出去,最开始也有这个担忧。磁盘io变成网络io会变慢。后来发现是完全多虑了。
4 K0 V- p+ _! w, u7 l6 A- |
2 j$ u& e( i0 X; O要避免网络io,默认没swap分区就行了。用户想用自己创建swap分区自己承担责任就成了。AWS就是这么搞的。" Q; ^' }" c5 v, Z4 L
) O' r% c- O1 I* W3 Y! `. {
网络比硬盘慢,总比把内存耗光当机为好。服务器多层保护没啥不好,当你觉得意外不可能的时候,他总会发生。就是有T级的内存,也不能保证够用哦,不够了,慢点比挂掉好。再说了,要配置足够用的内存,不要多预留富裕多花钱吗。我觉得这才是阿里决策的重要原因吧。
作者: 阿忙    时间: 2023-5-19 21:23
可梦之 发表于 2023-5-19 06:16
4 I) }5 [3 c/ o9 H4 s( D; h- v这个要商榷。现在网络数据是非常快的,尤其是同一机房内部,千兆起步。速度可能比一般的硬盘还快。我当初 ...

) b$ T! @$ v" z7 h/ z我觉得你的一个点是非常对的,“要么干脆不让用户用swap,如果让用户开了swap,那么就必须让它是工作的”,阿里的现在的做法实在是无法理解,
作者: 季侯    时间: 2023-5-20 09:18
可梦之 发表于 2023-5-19 19:16) Z3 U- V5 M% Z  J
这个要商榷。现在网络数据是非常快的,尤其是同一机房内部,千兆起步。速度可能比一般的硬盘还快。我当初 ...

0 h% x; C; n8 f: _+ R& r! T! n千瓦网络并不快啊,其实在13/14年时候,阿里云机房里面已经是万兆网络了,现在估计已经是10万兆网络了。
  J' j4 K0 D, z# b8 S
7 d5 {4 z3 {* p' f- Q! e9 w另外最大问题是确定性,本来跑的好好的服务,突然变慢了,查来查去是因为使用了swap,从本地磁盘调用到了网络io,这个是很尴尬的。5 x" f+ J* p% `, @' e! e6 v

& z- B; O" S6 H( R. H! p  x* Y当你只管理维护一两台服务的时候无所谓,如果要管理成千上万服务器时候,这种不确定性带来的问题是必须避免的。+ X9 g, i+ B. u- g0 M
5 g$ `7 [( a) c+ S8 W7 ?) V
另外这个配置应该是11/12年左右我定的,决定时候根本没有考虑让用户多用内存的因素,解决问题都来不及,哪有那闲心。) P2 H4 s- t. |3 U8 n" \) B

) K/ s2 j* V( f; T$ g闲人一思考,上帝就发笑。
& N* m3 D- ~4 D: x4 H% t' c% x
% B* a3 ]& Q' x0 \8 j
作者: 赫然    时间: 2023-5-20 09:26
季侯 发表于 2023-5-19 20:18
, z. x* `! ?: b$ k千瓦网络并不快啊,其实在13/14年时候,阿里云机房里面已经是万兆网络了,现在估计已经是10万兆网络了。
. |! k$ j% |2 y' S ...

9 a$ x8 K* J9 z' C! ]5 m! o正主现身了。。。。0 T# n/ V  G2 r- s& f
4 D  Q- Y! ~4 M
这个配置应该是11/12年左右我定的

作者: 季侯    时间: 2023-5-20 11:50
季侯 发表于 2023-5-20 09:18' q  b& {- f! B
千瓦网络并不快啊,其实在13/14年时候,阿里云机房里面已经是万兆网络了,现在估计已经是10万兆网络了。. `1 n% f6 M, @& p+ n" b& W/ i2 D
...

5 L/ n  m: a! o* U0 }5 r这里应该有点记错了,13/14年时候,万兆网络只是试点
作者: 可梦之    时间: 2023-5-20 12:49
季侯 发表于 2023-5-20 09:18
& H1 T) I) Y  m+ i3 e4 M) r千瓦网络并不快啊,其实在13/14年时候,阿里云机房里面已经是万兆网络了,现在估计已经是10万兆网络了。' m( S  W5 f; C/ I
...
2 |  u9 j, H+ ^, ~7 u
向专家请教一下:  X- G- a% Y3 d
1. 访问本地硬盘速度和通过网络访问同机房硬盘,速度能差多少?例如SATA III的速度大概是6Gbps,网络有多快?
5 t! ~7 q. W0 Y% b% k. i, }% a& l+ L2.  硬盘访问是无法避免的,数据存储位置是不是也会考虑这个速度,就近放置?还是完全随机存放。后者能让用户感觉更一致吗?' F  P) h( s- J6 P0 N  o3 M
3. 禁用swap,内存耗光了会怎样?我记得Linux会强制把一些高内存的进程给关掉。假如我内存固定是10G,用光后进程被杀死,不比变慢对用户来说更麻烦。而为了保证内存不被耗光,用户是不是要预留更多比如20G内存?还是有什么建议的策略?
& \0 Z+ R" k/ P% U; L$ e  R; T4. 禁用swap了,能否禁用用户swap分区,或者用户创建swap分区的时候给个提醒?
. d4 ]' q# [3 h7 S5. 主要速度差异应该是内存速度和硬盘/网络速度吧。swap的时候要把内存的数据dump到硬盘上去,肯定会让系统变慢,比较耗CPU的。/ F" e+ [: Q% [
6. 当初是为了解决什么问题,服务变慢?内存快满了,肯定会慢,这个不正常吗?AWS是怎么解决类似问题的?
6 t, B) p# Y) I# Q5 |
+ s/ n6 J  H* ?( Z多谢多谢。
作者: KXG    时间: 2023-5-22 05:19
可梦之 发表于 2023-5-20 12:49. b1 ~, r: w) Z% S, Y( P2 C. K, e+ m
向专家请教一下:& H$ G$ a  I* ^7 s7 d
1. 访问本地硬盘速度和通过网络访问同机房硬盘,速度能差多少?例如SATA III的速度大概 ...

$ a4 x2 f$ _, f以亚马逊云类比:2 T& e0 N+ _9 Y; U) u; e
网盘是云平台的共享资源,是有用度限制,要计量收费的。https://www.amazonaws.cn/ebs/pricing/
" c1 I8 i9 @6 o& M/ V" g3 T做缓存并不合适。实例存储可以是较好的选择:https://docs.amazonaws.cn/AWSEC2 ... nstanceStorage.html
. N6 Y/ z, p# V: J* a% {4 x
" G9 W, V4 g/ ~! v& R7 `& |9 C- @
作者: 可梦之    时间: 2023-5-22 07:32
KXG 发表于 2023-5-22 05:193 n4 O  E% n5 h! q4 G
以亚马逊云类比:
$ q) p; t6 I$ i3 K$ v网盘是云平台的共享资源,是有用度限制,要计量收费的。https://www.amazonaws.cn/ebs/ ...
( m# K8 D: m# l, j" |" l6 B
两个用的都是实例存储,没用网盘。
作者: KXG    时间: 2023-5-22 09:28
亚马逊的实例存储大概对应阿里云的本地盘,https://help.aliyun.com/document ... .0.0.1eeb53a6a8AAcJ
/ z1 ]* C5 N0 a0 I! B- ]用作缓存应该没问题。
8 s# F/ v: m9 v- D" D" o我只有亚马逊和Azure经验,对阿里云只是瞎猜。
作者: 季侯    时间: 2023-5-24 15:50
可梦之 发表于 2023-5-20 12:49" Z" K+ F8 f' h1 ]5 m0 I
向专家请教一下:
8 r9 C$ s. r. d) T! G1. 访问本地硬盘速度和通过网络访问同机房硬盘,速度能差多少?例如SATA III的速度大概 ...
9 }# r  Z. R# d9 B: M
从你的问题来看,你不是从事相关技术领域研发或者维护过大规模服务器集群的,所以就不说太多细节了。6 `0 j4 x) z: L  u5 J0 n

: {  h  z; W  f+ [3 W6 O9 g8 `我只提一点云存储是数据写三份并且三个物理机房,所以如果开启swap并使用,那么swap数据会写到异地的多个机房,如果存储本身出现一些峰值或者发布导致延时变大,这对一些延时敏感的应用来说,系统性能/延时会突然变得很差,又突然变好,这种不确定性对于系统稳定性是非常致命的。
作者: 可梦之    时间: 2023-5-24 17:02
本帖最后由 可梦之 于 2023-5-24 17:09 编辑 & H& q& w' `0 Z; l7 r3 y) E2 P
季侯 发表于 2023-5-24 15:50
( {" E8 b* E5 I  {从你的问题来看,你不是从事相关技术领域研发或者维护过大规模服务器集群的,所以就不说太多细节了。0 v, V* y; h& K1 x8 R
7 d; L, D7 y7 L6 x$ Y; ~
我 ...
- f( p: s, t4 t7 o( y9 S! r3 a$ Q

- s/ H) P) }% n' W我只是使用云服务的小客户。
. A6 E6 Q8 o- r6 n) P9 u/ N. i7 ~6 c( s, d7 u+ D4 n
那别的云服务商是怎么解决这个问题的。AWS并没有禁止掉swap。
" T7 u2 @0 S% {9 e
* d4 G5 O( T" o9 u% g, ]6 F数据需要异地灾备我是知道的。但是这个肯定是异步的。本地机房的写好了就可以继续做事情了,不用卡着等异地同步好了。所以你说的问题我还是不太理解。可能对延时非常敏感的应用来说是的,但是这些客户本身就知道应该怎么去优化。对于大部分对这个时延不太敏感的用户,这么做完全没必要。: C: f6 W' [+ M) @1 C
, [0 d! j+ K' A7 y3 T
比如我32G的内存足够我的应用,但是为了以防万一,我放10G的缓存。如果不出意外,swap基本不会被使用。一旦出了什么情况,10G缓存是让时延变大,但是总好过应用被kill掉吧。而且绝大部分应用,即便不用swap,也要用磁盘吧。你的网络IO要是太不稳定,时延问题还是会遇到吧?
作者: 可梦之    时间: 2023-5-24 17:20
季侯 发表于 2023-5-24 15:50
4 G0 D, q2 A( S9 y& g从你的问题来看,你不是从事相关技术领域研发或者维护过大规模服务器集群的,所以就不说太多细节了。# P8 O2 |# Y* G3 W8 A
# Z9 D, f1 D3 Z7 K! ]' r0 G
我 ...
+ N$ S5 X. _2 X7 b- ]
是这篇文章说的道理吗?https://developer.aliyun.com/article/194733
$ f  Q$ J2 i& q. B/ N3 c# V4 V9 }4 m& T
服务器一般都会配置监控程序,当内存用量达到一个阈值的时候告警或者会自动重启异常的进程。但如果没有监控呢?当内存被用光的时候,分两种情况:6 o: J1 m. F  R" t
: ?1 O: T% }* a% Y( d
配置了swap:这时服务器还能提供服务,但性能会降低好几个档次,直到最终处于几乎死机状态,并且这一过程将持续很长一段时间,对服务器来说是个灾难;所以配置swap只能让服务再苟延残喘一会儿,然后就是长时间的服务中断(比如原来是每秒处理1000个请求的服务器,由于频繁使用swap,导致现在每秒只能处理50个请求,站在系统角度,进程还在运行,但是在业务角度服务已经几乎中断了)。( p  q, k" m6 ^/ b1 V
没配置swap:这时内核的OOM killer被触发,在默认配置下,耗内存的进程会被优先kill掉,这种进程一般就是我们的业务进程,这时守护进程就会自动重启该业务进程(没有守护进程?开什么玩笑),这种情况只会造成服务中断一会会儿(取决于进程重启的时间),不会出现上面因配置了swap而导致性能很差且服务持续中断的情况。就算OOM killer没有kill掉预期的进程,我们通过测试也能发现,然后将OOM killer配置成重启系统,那也比配置了swap在那里苟延残喘的好。
4 ]4 \0 m$ v4 p  H* z从上面可以看出,对服务器来说,似乎不配置swap更好,可以让有问题的进程尽快重启,缩短业务受影响的时间。
作者: 季侯    时间: 2023-5-26 11:51
可梦之 发表于 2023-5-24 17:20
0 W4 V4 D- x# m& i是这篇文章说的道理吗?https://developer.aliyun.com/article/194733: l  k/ V4 e3 r3 m7 }8 g( Z( K

' X* o7 X9 I, I7 o服务器一般都会配置监控程序,当 ...

. ], E5 S6 Z' s5 F3 h8 Q$ p这是原因之一吧




欢迎光临 爱吱声 (http://129.226.69.186/bbs/) Powered by Discuz! X3.2