小编Alb*_*ert的帖子

在进程被 OOM 杀手 / cgroup 杀死之前接收信号

在我们的集群中,我们限制了我们的进程资源,例如内存 ( memory.limit_in_bytes)。

我认为,这最终也是通过 Linux 内核中的 OOM 杀手来处理的(通过阅读源代码看起来是这样)。

有没有办法在我的进程被杀死之前获得信号?(就像SGE 的-notify选项一样,它将在进程终止qsubSIGUSR1之前发送。)

我在/dev/mem_notify 这里读到,但我没有 - 现在还有别的东西吗?我也读过似乎有些相关。

我希望能够至少转储一个小的堆栈跟踪和其他一些有用的调试信息 - 但也许我什至可以通过释放一些内存来恢复。

我目前使用的一种解决方法是这个小脚本,它经常检查我是否接近 (95%) 限制,如果是,它会向进程发送一个SIGUSR1. 在 Bash 中,我在后台 ( cgroup-mem-limit-watcher.py &) 中启动此脚本,以便它监视同一 cgroup 中的其他 proc,并在父 Bash 进程终止时自动退出。

kill limit cgroups out-of-memory

15
推荐指数
3
解决办法
1万
查看次数

LD_LIBRARY_PATH 的默认值是多少?

在我的情况下,似乎LD_LIBRARY_PATH设置为空字符串。但是所有标准系统工具仍然可以正常工作,所以我猜动态链接器会检查这种情况并LD_LIBRARY_PATH在这种情况下使用一些默认值。

这个默认值是多少?我想它至少包括/usr/lib但还有什么?有没有什么好的系统方法来确定动态链接器将搜索的标准位置?

这个问题与动态链接器将搜索的路径略有不同。 有一个默认值意味着它会使用LD_LIBRARY_PATH如果给定的值,或者如果没有给定,它将使用默认值 - 这意味着它不会使用如果LD_LIBRARY_PATH提供了默认值。

defaults libraries path ld

13
推荐指数
1
解决办法
4万
查看次数

子进程的 stdbuf 假定行为

我没有在手册页中找到有关以下内容的内容。子进程中的假定行为如何由本身产生的进程产生stdbuf

例如:

stdbuf -oL myprog
Run Code Online (Sandbox Code Playgroud)

代码中,我知道它设置了LD_PRELOAD,据我所知,所有的环境变量都是在任何子进程中继承的。

我对两者fork();fork(); execv();子流程都感兴趣。(不确定这是否会有所作为。)

fork();根本不应该改变行为。execv()将使用相同的LD_PRELOAD(以及也存储在 env 中的 stdbuf 设置)并因此应用相同的行为(来自示例:stdout 是行缓冲的)。

对?

buffer stdout ld

5
推荐指数
1
解决办法
1165
查看次数

标签 统计

ld ×2

buffer ×1

cgroups ×1

defaults ×1

kill ×1

libraries ×1

limit ×1

out-of-memory ×1

path ×1

stdout ×1