ubuntu – 如何在/etc/security/limits.d/中更改堆栈深度限制,并将更改应用于启动时的服务

我的系统

>系列的Ubuntu 14.04.5(x86_64)服务器,不断更新
>我的应用程序需要增加postgres的堆栈深度
>我在/etc/security/limits.d/myapplication.conf中创建了一个文件
> myapplication.conf文件包含以下行:* – stack 131072
>注意131072KB == 128MB
>制作此myapplication.conf文件后,我的ulimit -s返回:131072
>然后我编辑了我的/etc/postgresql/9.3/main/postgresql.conf文件添加了以下行:max_stack_depth = 126MB

我的问题

在引导期间,将显示以下消息:

* The Postgresql server Failed to start. Please check the log output:
2018-01-24 09:27:53 MST LOG:  invalid value for parameter "max_stack_depth": 129024
2018-01-24 09:27:53 MST DETAIL:  "max_stack_depth" must not exceed 7680kB.
2018-01-24 09:27:53 MST HINT:  Increase the platform's stack depth limit via "ulimit -s" or local equivalent.
2018-01-24 09:27:53 MST FATAL:  configuration file "/etc/postgresql/9.3/main/postgresql.conf" contains errors
 * Starting Mount network filesystems                                    [ OK ]
 * Starting Postgresql 9.3 database server        * Stopping Mount networ[ OK ]systems
                                                                                             [fail]

这反过来导致我的应用程序服务失败,因为我依赖于我的数据库.启动后,如果我启动postgres服务,那很好:

dev@wipn:~$sudo service postgresql start
 * Starting Postgresql 9.3 database server                                                                                                                                                                                                                                                                             [ OK ] 
dev@wipn:~$

我的猜测是/etc/security/limits.d/myapplication.conf的效果仅适用于我的系统尝试启动postgres之后的启动阶段.所以,也许一个明显的解决方案是在我开始postgres时改变,那很好,我可以处理.

我的问题

有什么方法可以改变内核的堆栈深度,这样我只需要对服务器进行最小的改动?

我想要尽可能干净的东西.我希望它能够承受升级,最好适用于其他发行版.我通过Ansible戏剧管理我的东西,所以我宁愿为此写一个干净的游戏.

可能只是改变我的服务的开始顺序是最好的分辨率.那里的任何人都知道其他合适的选择吗?

运行我尝试的事物的更新

这是我尝试的一些事情的运行列表,没有成功.

在/etc/security/limits.d/myapplication.conf中:

> postgres – stack 131072
> * – 堆栈131072
root – stack 131072

直到有人能给我一个干净的解决方案,这就是我想出来的,而且很糟糕.我不会接受它作为我的问题的答案,但这里是(gags).至少它有效.

背景

似乎对/etc/security/limits.*的更改从不影响服务,而是从shell执行的东西.所以,这种使我在/etc/security/limits.*中的变化毫无意义. (在这里插入诅咒).我现在删除了我的/etc/security/limits.d/myapplication.conf.

更改postgres的堆栈大小限制

这是垃圾解决方案.我讨厌它.

我编辑了我的“/usr/share/postgresql-common/init.d-functions”,特别是start()函数,显示为:

...
# start all clusters of version $1
# output according to Debian Policy for init scripts
start() {
    ulimit -s 131072    #JTS: To avoid Issue #XYZ 

    # create socket directory
    if [ -d /var/run/postgresql ]; then
        chmod 2775 /var/run/postgresql
    else
    ...

显然我已经添加了ulimit行.修改文件对我来说很恶心,因为我希望它会被更新永久更改.至少我有一个Ansible规则来强制它存在.

我的Ansible解决方

这是我为了强制执行此配置更改而创建的Ansible任务:

- blockinfile:
    dest: /usr/share/postgresql-common/init.d-functions
    block: |
          ulimit -s 131072
    backup: yes
    insertafter: '^start\(\) \{'
    state: present

这个Ansible任务导致函数看起来像这样:

...
# start all clusters of version $1
# output according to Debian Policy for init scripts
start() {
# BEGIN ANSIBLE MANAGED BLOCK
ulimit -s 131072
# END ANSIBLE MANAGED BLOCK
    # create socket directory
    if [ -d /var/run/postgresql ]; then
       ...

注意:Upstart服务忽略/ etc / security / limits

似乎/etc/security/limits.*被Upstart忽略,Ubuntu 14.04使用它.我的应用程序服务实际上使用了upstart,并且可以为upstart插入一行,如下所示:

limit stack <softlimit> <hardlimit>

Ubuntu在14.04之后切换到systemd,所以这个新贵tid-bit将逐渐淡化为无关紧要.

这与我的问题无关,因为在14.04,postgresql不是由upstart管理的.

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...