跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Linux 服务器怎么预留资源(CPU、内存、IO 等)
未分類
24 12 月 2020

Linux 服务器怎么预留资源(CPU、内存、IO 等)

Linux 服务器怎么预留资源(CPU、内存、IO 等)

資深大佬 : symb0l 5

Linux 服务器怎么预留资源( CPU 、内存、IO 等),避免应用将 CPU 、内存、IO 全部吃完,避免出问题的时候,服务器登录不上,有大佬知道如何限制吗?

大佬有話說 (37)

  • 主 資深大佬 : symb0l

    通过内核配置可以限制吗?

  • 資深大佬 : aheadlead

    cgroup

  • 主 資深大佬 : symb0l

    @aheadlead 谢谢回复,用 cgroup 限制应用访问资源么,有点麻烦耶,我的意思是怎么配置,例如服务器的 CPU 只能跑到 95%,预留 5%的资源,大佬有这种设置吗?

  • 資深大佬 : taogen

    看头像就进来了

  • 資深大佬 : MeteorCat

    systemctl 有配置选项,你按照启动脚本加上 MemoryHigh,MemoryMax,还有 CPU 配置选项,这玩意特别有用,在搭建镜像拉取节点服务的时候防止占用过高特别有用

  • 資深大佬 : westoy

    cgroup 限制容器或者虚拟机的资源

    其实没必要预留
    就算高负载运转, 不是极端情况不至于登不上
    但是万一你被人打到端口都堵了, 丢包丢的稀里哗啦的, 资源预留也基本登不上了……

    这种情况,VPS 一般有 VNC, 物理机有 IPMI 、KVM over IP, 实在啥也没有让机房的人帮你重启一下

  • 主 資深大佬 : symb0l

    @taogen 守望 PG……

  • 資深大佬 : MeteorCat

    具体可以参照官方手册,但是要求你 linux 守护程序是 systemctl

  • 主 資深大佬 : symb0l

    @MeteorCat 谢谢大佬,但这种都是限制某个服务的,我的意思是指能不能通过什么配置,让服务器的 CPU 只能跑到 95%,预留 5%的资源,不至于出现极端情况,只能重启服务器。

  • 主 資深大佬 : symb0l

    @westoy 谢谢大佬,我没表达清楚,我的意思是指能不能通过什么配置,让服务器的 CPU 只能跑到 95%,预留 5%的资源,不至于出现极端情况,只能重启服务器。

  • 資深大佬 : MeteorCat

    @symb0l 我记得可以用 systemctl 对服务切片限制的,我看看手册

  • 主 資深大佬 : symb0l

    @MeteorCat 好咧,坐等大佬~

  • 資深大佬 : MeteorCat

    我看了一下, 可以执行命令 `sudo systemctl edit –force system.slice`, 之后限定 system.slice 的切片为:

    “`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

  • 資深大佬 : MeteorCat

    上面的方法还是治标不治本, 最好还是利用 `sudo systemd-cgtop` 命令来查看哪个服务器占用最异常再去进行限制

  • 資深大佬 : hatebugs

    感觉这是 xy 问题,确定要要解决的 x 问题,而不是花心思花精力搞 y 问题。

  • 資深大佬 : BrettD

    没看懂主什么意思,服务器 CPU 为什么要浪费 5%不用呢

  • 主 資深大佬 : symb0l

    @hatebugs 主要目前现在 x 问题,会突发,不想在 x 问题发生的时候太过于变动

  • 主 資深大佬 : symb0l

    @BrettD 预留资源,在极端情况下,,,不至于连登录服务器查问题都做不了嘛

  • 主 資深大佬 : symb0l

    @MeteorCat 感谢大佬,学习 ing

  • 資深大佬 : westoy

    @symb0l

    你如果没手动改抢占模式, 再指定各程序优先级, 这种状况情况不可能出现的, 你让所有核跑 while(1);同时占满, 都可以无障碍登录上去

    我目前碰到过无法登录的, 内核挂掉, 只能人工干预; 硬盘挂,WA 100%,登录上去基本动都不能动, 只能人工干预; 被人打爆,SSH 上去直接超时,或者登录后直接卡死, 只能人工干预…….

  • 資深大佬 : systemcall

    卡死一般是 I/O 爆了不是 CPU 爆了吧,CPU 本来就是有时间切片的,内核没挂应该不至于完全没法响应。I/O 的话,有限制的方法吗?

  • 資深大佬 : BrettD

    @symb0l 我没明白浪费 5%的资源怎么能够帮助解决服务器卡死的问题,你自己远程登录的时候不也是和其他程序一起挤那 95%吗

  • 資深大佬 : YouLMAO

    …..
    我不清楚你的问题, 既然所有用户加起来只能用 95%cpu, 你登录 ssh 凭什么能用这 5%了, 难道你不是用户之一吗

    # 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 个用户就跑满了

  • 資深大佬 : msg7086

    CPU 只能跑到 95%的话,等同于把 CPU 频率降低 5%。
    CPU 预留得越多,卡死的概率越大。

  • 資深大佬 : Inn0Vat10n

    如果是想全局限制,95%满了和 100%满了不都没区别吗,如果是限制特定进程,cgroup

  • 資深大佬 : geligaoli

    使用 lxc,性能基本无损失。可以限制 CPU 、内存、硬盘 IO

  • 資深大佬 : ClericPy

    就你说的场景, 目前见过的 cgroups docker systemd. 然后 python 启动子进程设置 resource 里的最大虚拟内存, 或者 ulimit 限制虚拟内存的时候, 貌似直接把超标的杀了…

    hadoop 上因为虚拟内存超标想限制下都没找到 yarn 里怎么设置唉

  • 資深大佬 : BYF

    用 ulimit,可以临时设置限制,重启后失效。
    如果想永久生效,需要修改 /etc/security/limits.conf
    但是需要重新启动

  • 主 資深大佬 : symb0l

    @systemcall 同求 IO 的限制办法

  • 主 資深大佬 : symb0l

    @BrettD 是的。但是用户不一样,我的意思是能不能预留 5%的资源给 root 用户,不管其它用户对服务器的资源用到什么极端程度,我能暴涨 root 用户能上去管理

  • 主 資深大佬 : symb0l

    @BYF ulimit 能限制 IO 这些吗?

  • 資深大佬 : quake0day

    同意 @geligaoli 你的这种需求建议上 ESXi 之类的虚拟化平台,把系统创建在虚拟机里,这样可以确保不管哪个超标,你都能登录上管理平台,而且以后直接在网页端就可以维护,也方便。

  • 資深大佬 : BYF

    @symb0l ulimit 和 limits.conf 都不能按照百分比设置限制,或许你可以手动算一下。
    能限制用户内存使用、线程数量和同时打开的文件数量。

    ①以下是 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

  • 資深大佬 : BYF

    @symb0l 啊还有,目前很多软件自身就可以修改占用系统资源的多少。
    比如
    nginx,可以在配置文件中声明 nginx 可以同时运行多少个进程,每个进程允许有多少个并发连接。
    mysql,可以设置服务端占用多少内存资源,最大连接数,和查询速度什么的。
    如果服务器收到的正常访问请求太多,建议做负载平衡,而不是限制使用。(需要多台服务器)
    那是硬件资源的浪费。

    一般在内核没有崩溃的情况下,linux 会响应 SSH 连接。可能比较慢,但还不至于完全卡住。
    SSH 完全没反应就 VNC

  • 資深大佬 : tkl

    @BrettD 那我为什么不能把 openssh 放到那 5%呢?

    @systemcall
    IO 没有那么简单 cgv1 可以限制 direct IO cgv2 可以限制 buffer IO (印象中

    看上面的回复,这都有人杠,应该没遇到多租户抢资源吧

  • 資深大佬 : jingniao

    服务器卡死一般遇到的是内存不足触发 oom,但因为 oom 也需要内存,所以就卡死,登录不了。
    没碰到磁盘 cpu 问题导致无法 ssh
    针对内存,我装了 earlyoom 提前杀掉可能会 oom 的进程

  • 資深大佬 : BrettD

    @tkl 主可没这么说

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具