gpt4 book ai didi

java - 服务器 java 应用程序经常 fork

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:09 25 4
gpt4 key购买 nike

我是一名工程师,非常熟悉 Unix 内部结构,但不熟悉 Java :(

我在 Linux 上管理一个服务器 Java 应用程序,最近发现它 fork 非常频繁(即一分钟几次)。

我的发现是:

  1. 由于java进程占用>20GB内存,forking本身占用另外20GB
  2. fork完成后,子进程快速退出
  3. 子进程的argv[0]是'[ls]',这可能暗示父进程调用/bin/ls

所以我的问题是,这是 java 实现的首选行为吗?

我的理解是, fork 一个巨大的进程对系统来说应该是一个沉重的负载,而类似的事情可以在系统负载更轻的 Java 线程中完成。

感谢和问候,踢球

附言。抱歉,我无法访问 Java 应用程序的源代码。

最佳答案

确实,您看到的是调用 ls 的 Java 程序。 Fork+exec 是标准的系统调用集,您会在程序调用另一个命令时看到。

幸运的是, fork 很便宜。 Linux 在创建子进程时不会复制程序的所有内存。相反,它使用写时复制在两个进程之间共享内存。只有当任一进程更改某些内容时,内存才会真正复制。

对于 Java 程序来说,使用 Java API 获取文件列表而不是调用外部命令会更聪明。调用 ls 有点懒惰。不过,这不是您应该关心的事情。作为管理员,请不要担心。

关于java - 服务器 java 应用程序经常 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48738106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com