善意提醒

如果您打开本站很慢,布局排版混乱,并且看不到图片,那么可能是因为您还没有掌握用科学的方法上网的本领。

2024-09-14

Linux 下修改 ulimit 不能完全生效的问题

前言:本文只打算作为「技术笔记」来写,对关键的要点进行一下点拨就完事,没想写成教程。或许能让熟手解决麻烦,如果是新手的话,最好是先有相关的基础知识和经验。当然,直接喂给AI,让它嚼过再给你慢慢解释,可能也是一个办法。

这些天还是在折腾信创的事情。安装了银河麒麟 V10 SP2 的一个默认设置的版本,带了可视化界面,准备用于安装「达梦」。
达梦的安装手册写得有一些问题,缺了一些要点,不过对于有一定经验的人而言,还算能解决。手册中有一个要求,就是要把 ulimit 里面的 open files 数量调大。原始的 1024,看起来不太够用。

图片来自网络

对 Linux 特别是 CentOS7 熟悉的人,应该反应过来了。不要直接改 ulimit,应该去改 /etc/security/limits.conf:

* soft nofile 65535
* hard nofile 65535

改完之后,重新登录的账号就已经是新的 open files 上限了。简单重启一下就应该万事 OK 了。

可是,不,没有那么简单!(莫名其妙的英式中文)


在我看来,改完重启以后,对于非 root 用户似乎完全没有效果。
root 账号好像真的是 OK 了。但达梦的安装手册提到需要创建专用的 dmdba 账号用于 DBMS 的安装。我在可视化界面登录 dmdba 账号后,打开「终端」窗口,ulimit 还是 1024。

测试下来,发现:

  • ssh 上来的 session 有效果;
  • su 切换过去的账号有效果。

这说明对 /etc/security/limits.conf 的修改还是有效果的,只是不知道为什么在某些场合下不能生效。
百思不得其解。最后找到这篇 Blog,是博客园的。标题起得有点不好找:《systemd service 设置 limit,不生效问题》。它引用的原文的 URL 已经失效了,所以我还是得把要点直接再说一下。简单来说就是:

  1. 要修改用 systemctl 启动的服务的 ulimit,需要修改 /etc/systemd/system.conf
  2. 要修改从可视化界面登录的用户的 ulimit,需要修改 /etc/systemd/user.conf

实际上的情况比这个要复杂一些。第二点不是原文中的描述,是我自己试出来的。我目前也无意去成为一个 Linux 或银河麒麟方面的专家,所以就暂时不作更多的探索了。

另外,修改了 /etc/systemd/system.conf 以后,需要先重启 systemd:

systemctl daemon-reexec

然后用 systemctl 启动/重新启动的服务,才能用上新的 ulimit 设置。
毕竟咱们改的是 systemd 的配置文件,对吧。

没有评论:

发表评论