如何为单个进程设置ulimit?

老师,/proc/pid/limits这个文件不让通过vim支持修改啊,那么我改如何修改单个进程的ulimit呢?

IT_Angel

赞同来自:

为了解决hadoop streaming的coredump问题,需要修改系统ulimit设置,默认的ulimit仅对当前用户会话生效,那如何为某个单独进程设置ulimit的呢?

fish - Hadooper

赞同来自:

尝试在hadoop启动脚本中加上ulimit设置想要的值。

IT_Angel

赞同来自:

老师,我还是没有理解,ulimit这个命令是针对单个进程来设置,还是针对某个用户来设置?它的粒度到底是什么? =============================================================================================== 我在yarn-deamon.sh启动脚本中添加了,ulimit -c unlimited命令,我查看了yarn-yarn-nodemanager-mycluster-1.out文件,内容如下:
yarn-out.png
  然后查看当前yarn的nodemanager进程号:
jps.png
  再查看当前进程的limits文件信息:
proc-ulimit.png
  可以看到,当前进程的limits文件中core的设置与yarn打印的ulimit信息中的core不一致,所以我没理解ulimit到底是针对哪个对象设置的呢?

fish - Hadooper

赞同来自:

试试在yarn-env.sh里面修改。

IT_Angel

赞同来自:

老师确实可以了,但是我没明白,为什么在这个文件中执行unlimit命令,就可以影响到进程的limits内容呢?

fish - Hadooper

赞同来自:

我加在yarn-daemon.sh中也可以:
1474267415587.png
 

IT_Angel

赞同来自:

恩 老师我的意思其实是为什么 通过运行yarn-env.sh脚本文件后,会改变当前进程的limit内容,而在运行yarn-env.sh脚本之后就不会改变当前进程的limit内容呢?

fish - Hadooper

赞同来自:

你只需要添加在脚本实际启动服务进程之前就可以,比如,我如下加也可以:
    echo starting $command, logging to $log
    cd "$HADOOP_YARN_HOME"
    ulimit -c unlimited
    nohup nice -n $YARN_NICENESS "$HADOOP_YARN_HOME"/bin/yarn --config $YARN_CONF_DIR $command "$@" > "$log" 2>&1 < /dev/null &
    echo $! > $pid
 

IT_Angel

赞同来自:

老师,我的理解是不是在启动脚本中执行的命令,比如ulimit的作用域是在ulimit所在脚本中之后所有启动的进程呢?也就是说如果我ulimit命令之后连续启动了两个进程,是不是这两个进程的Limits内容都会被改变呢?

fish - Hadooper

赞同来自:

执行之后,影响当前进程以及子进程。

IT_Angel

赞同来自:

这个进程指的是什么?linux运行脚本的时候会为脚本本身分配一个进程,在脚本中执行应用的时候,也会为应用本身分配一个进程,我知道到底指的是哪一个进程呢?

fish - Hadooper

赞同来自:

脚本是个进程,脚本中调用java命令或者其它脚本,就是启动它的子进程。

IT_Angel

赞同来自:

哦,是不是ulimit命令执行后,只能影响到在执行这条命令之后开启的所有子进程呢?如果在执行这个命令之前启动的子进程就不会影响到是吗?

要回复问题请先登录注册