Hi Michal
I think the current OOM report is imcomplete. I can get the task which invoked the oom-killer and the task which has been killed by the oom-killer, and memory info when the oom happened. But I cannot infer the certain memcg to which the task killed by oom-killer belongs, because that task has been killed, and the dump_task will print all of the tasks in the system.
mem_cgroup_print_oom_info will print five lines of content including memcg's name , usage, limit. I don't think five lines of content will cause a big problem. Or it at least prints the memcg's name.
Thanks
Wind
Michal Hocko <mhocko@xxxxxxxxxx> 于2018年5月17日周四 下午3:11写道:
On Thu 17-05-18 08:00:28, ufo19890607 wrote:
> From: yuzhoujian <yuzhoujian@xxxxxxxxxxxxxxx>
>
> The dump_header does not print the memcg's name when the system
> oom happened. Some users want to locate the certain container
> which contains the task that has been killed by the oom killer.
> So I add the mem_cgroup_print_oom_info when system oom events
> happened.
The oom report is quite heavy today. Do we really need the full memcg
oom report here. Wouldn't it be sufficient to print the memcg the task
belongs to?
> Signed-off-by: yuzhoujian <yuzhoujian@xxxxxxxxxxxxxxx>
> ---
> mm/oom_kill.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/mm/oom_kill.c b/mm/oom_kill.c
> index 8ba6cb88cf58..244416c9834a 100644
> --- a/mm/oom_kill.c
> +++ b/mm/oom_kill.c
> @@ -433,6 +433,7 @@ static void dump_header(struct oom_control *oc, struct task_struct *p)
> if (is_memcg_oom(oc))
> mem_cgroup_print_oom_info(oc->memcg, p);
> else {
> + mem_cgroup_print_oom_info(mem_cgroup_from_task(p), p);
> show_mem(SHOW_MEM_FILTER_NODES, oc->nodemask);
> if (is_dump_unreclaim_slabs())
> dump_unreclaimable_slab();
> --
> 2.14.1
>
--
Michal Hocko
SUSE Labs