![为什么 Sonatype Nexus 似乎占用了大量内存和 CPU 时间?](https://linux22.com/image/795516/%E4%B8%BA%E4%BB%80%E4%B9%88%20Sonatype%20Nexus%20%E4%BC%BC%E4%B9%8E%E5%8D%A0%E7%94%A8%E4%BA%86%E5%A4%A7%E9%87%8F%E5%86%85%E5%AD%98%E5%92%8C%20CPU%20%E6%97%B6%E9%97%B4%EF%BC%9F.png)
在我的 SC2 实例上运行 Amazon Linux 上的 nexus。全新安装,然后我针对它构建了一个小项目。除了我之外没有人使用。
我第一次启动 Nexus 时,CPU 利用率一开始是 97%,内存使用率是 20%。几分钟后,CPU 利用率会稳定在 2-6%,内存利用率在 20-40% 之间。在 640MB 的实例上,这意味着内存占用在 128 到 256MB 之间!这似乎不对,尤其是 Nexus 宣称自己只需要 28MB。这是怎么回事?
以下是 ps aux 的读数,如果有帮助的话:
root 25227 0.0 0.1 16980 692 ? Sl 16:05 0:00 /mnt/vol1/nexus-oss-webapp-1.9.1.1/bin/jsw/linux-x86-64/./wrapper /mnt/vol1/nexus-oss-webapp-1.9.1.1/bin/jsw/linux-x86-64/../conf/wrapper.conf
wrapper.syslog.ident=nexus wrapper.pidfile=/mnt/vol1/nexus-oss-webapp-1.9.1.1/bin/jsw/linux-x86-64/./nexus.pid wrapper.daemonize=TRUE wrapper.lockfile=/var/lock/subsys/nexus
root 25229 3.0 20.0 1247852 122628 ? Sl 16:05 0:12 java -Dsun.net.inetaddr.ttl=3600 -Dbasedir=. -Djava.io.tmpdir=./runtime/tmp -Djava.library.path=bin/jsw/linux-x86-64/lib -classpath bin/jsw/li
b/wrapper-3.2.3.jar:./runtime/apps/nexus/lib/plexus-classworlds-2.4.jar:./conf/ -Dwrapper.key=GZhnIo3i5ox4LVLp -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=252
27 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.codehaus.plexus.classworlds.launcher.Launcher
(是的,我知道我不应该以 root 身份运行。这只是一个测试)
我还应该补充一点,有一次,我要求 nexus 索引 maven 中央存储库,当我这样做时,CPU 利用率会飙升,在 30% 到 90% 之间,并且一直保持这种状态,直到我最终终止该进程。
有什么想法吗?
答案1
我发现 Nexus 在启动时 (vmstat/top) 使用了大量“%sys”CPU(而不是 usr 或 iowait)。我还没有弄清楚,但我认为这可能是一个有用的提示。
答案2
我第一次启动 Nexus 时,CPU 利用率一开始为 97%,内存使用率为 20%。几分钟后,CPU 利用率会稳定在 2-6%,内存利用率在 20-40% 之间。在 640MB 实例上,这意味着内存利用率在 128 到 256MB 之间!
我不明白为什么当您以 640M 启动实例时,nexus 只占用 28M 的堆;只需以您想要提供的最大 RAM 量启动上下文即可。但是,如果您有大量存储库,内存使用量可能会大幅增加。CPU 使用率是由于实时索引的维护。
我还应该补充一点,有一次,我要求 nexus 索引 maven 中央存储库,当我这样做时,CPU 利用率会飙升,在 30% 到 90% 之间,并且一直保持这种状态,直到我最终终止该进程。
如果您指的是“重新索引存储库”计划任务,则镜像存储库不需要它。重新索引可能是一项非常繁重的任务,它只对您认为存在 maven 元数据损坏的本地托管存储库有用,或者如果您在 nexus 之外修改了 nexus 文件系统。您只需要为镜像存储库“下载索引”和“发布索引”。
这篇博客文章详细解释了计划任务:
http://www.sonatype.com/people/2009/09/nexus-scheduled-tasks/