我通过 ssh 连接到办公室的一台服务器,它运行的是 Lucid Lynx 10.04。我不知道它为什么运行这么多 Java 实例。
谢谢
这是控制台的吐词$ top
Tasks: 134 total, 2 running, 132 sleeping, 0 stopped, 0 zombie
Cpu(s): 98.2%us, 1.8%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1926032k total, 1895432k used, 30600k free, 19500k buffers
Swap: 5644280k total, 192576k used, 5451704k free, 268796k cached
PID USER NI VIRT RES SHR S %CPU %MEM TIME+ PPID GROUP COMMAND
27132 padmin 0 1149m 405m 10m S 58 21.6 429:33.50 1 padmin java
7169 padmin 0 1134m 380m 10m S 57 20.2 37:02.32 1 padmin java
1893 padmin 0 1142m 381m 10m S 51 20.3 170:03.34 1 padmin java
3515 padmin 0 1105m 241m 916 S 20 12.8 4932:54 1 padmin java
16946 root 0 41784 7768 1084 S 1 0.4 0:00.13 6935 root munin-node
17301 nobody 0 17368 2744 1696 R 1 0.1 0:00.03 16946 munin memory
16930 root 0 41784 7768 1084 S 1 0.4 0:00.13 6935 root munin-node
54 root 0 0 0 0 S 0 0.0 22:38.89 2 root kondemand/0
926 mysql 0 237m 2484 664 S 0 0.1 14:30.06 1 mysql mysqld
1692 root 0 1017m 51m 27m S 0 2.7 60:31.46 1 root mongod
3284 padmin 0 76400 1032 232 S 0 0.1 0:30.69 1 padmin memcached
16012 padmin 0 19224 1424 1064 R 0 0.1 0:00.82 12115 padmin top
1 root 0 23904 1316 644 S 0 0.1 0:00.74 0 root init
2 root 0 0 0 0 S 0 0.0 0:00.01 0 root kthreadd
3 root 0 0 0 0 S 0 0.0 0:00.03 2 root migration/0
4 root 0 0 0 0 S 0 0.0 0:00.27 2 root ksoftirqd/0
5 root 0 0 0 0 S 0 0.0 0:00.21 2 root watchdog/0
6 root 0 0 0 0 S 0 0.0 0:00.03 2 root migration/1
7 root 0 0 0 0 S 0 0.0 0:00.95 2 root ksoftirqd/1
8 root 0 0 0 0 S 0 0.0 0:00.15 2 root watchdog/1
9 root 0 0 0 0 S 0 0.0 1:09.30 2 root events/0
如您所见,所有 java 实例都具有相同的 ppid。这是一个轻微的情况。在许多疯狂的实例中,最多可以有 7-10 个 java 实例。如果您需要任何其他输出,请告诉我。
另外,每次我登录服务器时,我都会收到
*** System restart required ***
java 实例太多是原因吗?
编辑:$ pstree
init─┬─apache2───5*[apache2]
├─atd
├─avahi-daemon───avahi-daemon
├─console-kit-dae───63*[{console-kit-da}]
├─cron
├─cupsd
├─dbus-daemon
├─dnsmasq
├─dovecot─┬─2*[dovecot-auth]
│ ├─3*[imap-login]
│ └─3*[pop3-login]
├─6*[getty]
├─java───56*[{java}]
├─java───67*[{java}]
├─libvirtd───6*[{libvirtd}]
├─master─┬─pickup
│ └─qmgr
├─2*[memcached───5*[{memcached}]]
├─mongod───76*[{mongod}]
├─munin-node
├─mysqld───9*[{mysqld}]
├─named───4*[{named}]
├─nmbd
├─postgres───4*[postgres]
├─rsyslogd───3*[{rsyslogd}]
├─smbd───smbd
├─sshd───sshd───sshd───bash───pstree
├─udevd───2*[udevd]
├─upstart-udev-br
├─vsftpd
└─winbindd───3*[winbindd]
答案1
事实上它是一个 Java 进程,但这并不能告诉你很多关于实际应用程序的信息;你想看到整个命令行。ps -fp $(pgrep -d, -x java)
应该给你每个当前 java 进程的完整命令行(如果它们是短暂的进程,那么首先查找进程可能会失败,因为当您尝试找到它的命令行时它可能已经完成,因此在一行中执行它是个好主意)
答案2
我不认为这些代表 Java 线程,因为它们每个都有不同的 PID。
您可以让 padmin 用户(或 root 用户,或者可以使用 sudo 实现此目的的用户等)使用以下任一方法检查这些相应 Java 进程的命令行(将 pid 替换为顶部输出中的相应数字 - 27132、7169 等):
ps -ef | grep pid
或者
猫/ proc / pid / cmdline
这样,至少你可以开始弄清楚它们每一个是从哪里调用的,以及它在做什么。
答案3
1)如果不看你的进程列表,很难判断,但很可能你只是观察了许多 Java线程,实例/进程不多。Java 本质上非常大量使用线程,因此看到很多线程是很正常的。
2) 您已更新服务器,其中一个更新是内核升级。这需要重新启动才能使用新内核,因此 Ubuntu 要求您重新启动服务器。
答案4
“ps aux | grep java” 输出将提供有关该问题的更好的数据。
但是对于给定的数据,只有一个兴趣点:这些 Java 程序的组:padmin。这个用户是你的用户,对吗?因为你正在用这个用户运行“top”。
您还以您的用户身份运行 memcached。因此我怀疑您已以该用户身份运行了完整的服务器实例。也许是 Tomcat?它至少使用 Java。
从那个时间来看,这些进程已经运行了很长时间,所以我猜测它们是程序的某种后端线程。