Linux 服务器怎么预留资源(CPU、内存、IO 等)
Linux 服务器怎么预留资源( CPU 、内存、IO 等),避免应用将 CPU 、内存、IO 全部吃完,避免出问题的时候,服务器登录不上,有大佬知道如何限制吗?
Linux 服务器怎么预留资源( CPU 、内存、IO 等),避免应用将 CPU 、内存、IO 全部吃完,避免出问题的时候,服务器登录不上,有大佬知道如何限制吗?
其实没必要预留
就算高负载运转, 不是极端情况不至于登不上
但是万一你被人打到端口都堵了, 丢包丢的稀里哗啦的, 资源预留也基本登不上了……
这种情况,VPS 一般有 VNC, 物理机有 IPMI 、KVM over IP, 实在啥也没有让机房的人帮你重启一下
“`ini
[Slice]
CPUQuota=95%
MemoryMax=1G
“`
但是这种方案实际上治标不治本, 还是要排查出指定哪个服务呢问题来处理
可以参考配置:
官方文档: https://www.man7.org/linux/man-pages/man5/systemd-user.conf.5.html
网上回答: https://serverfault.com/questions/874274/systemd-per-user-cpu-and-or-memory-limits
你如果没手动改抢占模式, 再指定各程序优先级, 这种状况情况不可能出现的, 你让所有核跑 while(1);同时占满, 都可以无障碍登录上去
我目前碰到过无法登录的, 内核挂掉, 只能人工干预; 硬盘挂,WA 100%,登录上去基本动都不能动, 只能人工干预; 被人打爆,SSH 上去直接超时,或者登录后直接卡死, 只能人工干预…….
# mkdir -p /etc/systemd/system/user-.slice.d
# cat > /etc/systemd/system/user-.slice.d/50-memory.conf << EOF
[Slice]
CPUQuota=200%
EOF
# systemctl daemon-reload
假设 80 核的机器, 40 个用户就跑满了
hadoop 上因为虚拟内存超标想限制下都没找到 yarn 里怎么设置唉
①以下是 ulimit 使用帮助
# ulimit –help
ulimit: ulimit [-SHabcdefiklmnpqrstuvxPT] [限制]
修改 shell 资源限制。
在允许此类控制的系统上,提供对于 shell 及其创建的进程所可用的
资源的控制。
选项:
-S 使用软 (`soft’) 资源限制
-H 使用硬 (`hard’) 资源限制
-a 所有当前限制都被报告
-b 套接字缓存尺寸
-c 创建的核文件的最大尺寸
-d 一个进程的数据区的最大尺寸
-e 最高的调度优先级 (`nice’)
-f 有 shell 及其子进程可以写的最大文件尺寸
-i 最多的可以挂起的信号数
-k 分配给此进程的最大 kqueue 数量
-l 一个进程可以锁定的最大内存尺寸
-m 最大的内存进驻尺寸
-n 最多的打开的文件描述符个数
-p 管道缓冲区尺寸
-q POSIX 信息队列的最大字节数
-r 实时调度的最大优先级
-s 最大栈尺寸
-t 最大的 CPU 时间,以秒为单位
-u 最大用户进程数
-v 虚拟内存尺寸
-x 最大的文件锁数量
-P 最大伪终端数量
-T 最大线程数量
并非所有选项在所有系统上可用。
如果提供了 LIMIT 变量,则它为指定资源的新的值;特别的 LIMIT 值为`soft’、`hard’和`unlimited’,分别表示当前的软限制,硬限制和无限制。否则打印指定资源的当前限制值,不带选项则假定为 -f
取值都是 1024 字节为单位,除了 -t 以秒为单位,-p 以 512 字节递增,-u 为无范围的进程数量。
② /etc/security/limits.conf 使用帮助
命令如下:vim /etc/security/limits.conf
按以下格式写入
域 类型 项 值
ftp hard nproc 0
域—可以是:
– 用户名
– 具有组语法的组名称
– 通配符* ,用于默认条目
– 通配符% ,也可以与组语法一起使用
类型—可以具有两个值:
– 执行软限制
– 执行硬限制
项—可以是以下项之一:
– core – 限制核心文件大小 ( KB )
– data – 最大数据大小 ( KB )
– fsize – 最大文件化 ( KB )
– memlock – 最大锁定内存地址空间 ( KB )
– nofile – 打开文件描述符的最大数量
– rss – 最大驻留集大小 ( KB )
– stack – 最大堆栈大小 ( KB )
– cpu – 最大 CPU 时间(最小值)
– nproc – 最大工艺数
– as – 地址空间限制 ( KB )
– maxlogins – 此用户的最大登录数
– maxsyslogins – 系统上的最大登录数
– priority – 使用
– locks – 用户可以保留的文件锁的最大数量
– sigpending – 挂起信号的最大数量
– msgqueue – POSIX 消息队列使用的最大内存数(字节)
– nice – 最大好优先级允许提高到值: – 20,19
– rtprio – 最大实时优先级
如果你想设置某些进程的资源占用
建议使用修改 /etc/security/limits.conf 的方法
设置项目比较详细,且文件中有设置实例可以参照
但要注意一个问题,以上内容我并没有完全实践过,如果在修改设置后出现服务不正常的现象,请再次修改 /etc/security/limits.conf
直接将新加入的内容用#号注释,重新启动系统后可以使限制失效
例如:
#ftp hard nproc 0
一般在内核没有崩溃的情况下,linux 会响应 SSH 连接。可能比较慢,但还不至于完全卡住。
SSH 完全没反应就 VNC
@systemcall
IO 没有那么简单 cgv1 可以限制 direct IO cgv2 可以限制 buffer IO (印象中
看上面的回复,这都有人杠,应该没遇到多租户抢资源吧