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的配置文件,对吧。

没有评论:

发表评论