Java Weblogic在VM(VirtualBox和VMware)下启动缓慢(11分钟)

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2563135/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 09:17:39  来源:igfitidea点击:

Weblogic is slow to start (11mins) under VM (VirtualBox and VMware)

javaweblogicvirtual-machinevmwarevirtualbox

提问by Vladimir Dyuzhev

(SOLVED! BY FAKING SYSTEM RANDOM GENERATOR, SEE BELOW)

(已解决!通过伪造系统随机生成器,见下文)

I'm setting up a VM image for my dev/build team. Inside that VM a Weblogic domain should be running. I use Ububtu server distro, WLS 9.2MP3 + ALSB.

我正在为我的开发/构建团队设置 VM 映像。在那个 VM 中,一个 Weblogic 域应该正在运行。我使用 Ububtu 服务器发行版,WLS 9.2MP3 + ALSB。

Everything works OK, quite fast, but at the start time the WLS stops twice for a measurable amounts of time. Two stops in total amount to about 10 minutes delay. For tasks where deployment requires server restart it's very annoying. :-(

一切正常,速度非常快,但在开始时 WLS 会在可测量的时间内停止两次。两站总共约10分钟的延误。对于部署需要重新启动服务器的任务,这非常烦人。:-(

Sleeping time is not constant, sometimes the server starts very fast, sometimes so-so, sometimes 10 minutes or more.

休眠时间不是固定的,有时服务器启动很快,有时一般,有时 10 分钟或更长时间。

Interesting that if I press Enter while looking at the stopped server, it wakes up much faster, sometimes after a few seconds. WLST (Weblogic Jython shell) is also hanging for quite a time when executed in VM. It doesn't react to Enter though.

有趣的是,如果我在查看停止的服务器时按 Enter,它会更快地唤醒,有时会在几秒钟后。在 VM 中执行时,WLST(Weblogic Jython shell)也挂了很长时间。但是它对 Enter 没有反应。

Here must be some developers who run WLS with a VM. I wonder if others have the same problem? Was someone able to solve it?

这里一定有一些开发人员使用 VM 运行 WLS。我想知道其他人是否有同样的问题?有人能解决吗?

Here's the server output (just for a case):

这是服务器输出(仅用于案例):

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_12-b04)
Java HotSpot(TM) Client VM (build 1.5.0_12-b04, mixed mode)
Starting WLS with line:
/shared2/beahome/jdk150_12/bin/java -client   -Xmx256m  -XX:MaxPermSize=128m  -Xverify:none  -da -Dplatform.home=/shared2/beahome/weblogic92
 -Dwls.home=/shared2/beahome/weblogic92/server -Dwli.home=/shared2/beahome/weblogic92/integration  -Dweblogic.management.discover=true  -Dwl
w.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/shared2/beahome/patch_weblogic923/profiles/default/sysext_
manifest_classpath -Dweblogic.management.username=admin -Dweblogic.management.password=wlsadmin -Dweblogic.Name=LOGMGR-admin -Djava.security
.policy=/shared2/beahome/weblogic92/server/lib/weblogic.policy   weblogic.Server
<1-Apr-2010 12:47:22 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000395> <Following extensions directory contents added to the end
of the classpath:
/shared2/beahome/weblogic92/platform/lib/p13n/p13n-schemas.jar:/shared2/beahome/weblogic92/platform/lib/p13n/p13n_common.jar:/shared2/beahom
e/weblogic92/platform/lib/p13n/p13n_system.jar:/shared2/beahome/weblogic92/platform/lib/wlp/netuix_common.jar:/shared2/beahome/weblogic92/pl
atform/lib/wlp/netuix_schemas.jar:/shared2/beahome/weblogic92/platform/lib/wlp/netuix_system.jar:/shared2/beahome/weblogic92/platform/lib/wl
p/wsrp-common.jar>
<1-Apr-2010 12:47:22 o'clock PM GMT-05:00> <Info> <WebLogicServer> <BEA-000377> <Starting WebLogic Server with Java HotSpot(TM) Client VM Ve
rsion 1.5.0_12-b04 from Sun Microsystems Inc.>
<1-Apr-2010 12:47:23 o'clock PM GMT-05:00> <Info> <Management> <BEA-141107> <Version: WebLogic Server 9.2 MP3  Mon Mar 10 08:28:41 EDT 2008
1096261 >
<1-Apr-2010 12:47:25 o'clock PM GMT-05:00> <Info> <WebLogicServer> <BEA-000215> <Loaded License : /shared2/beahome/license.bea>
<1-Apr-2010 12:47:25 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING>
<1-Apr-2010 12:47:25 o'clock PM GMT-05:00> <Info> <WorkManager> <BEA-002900> <Initializing self-tuning thread pool>
<1-Apr-2010 12:47:25 o'clock PM GMT-05:00> <Notice> <Log Management> <BEA-170019> <The server log file /shared2/wldomains/beaadmd/LOGMGR/ser
vers/LOGMGR-admin/logs/LOGMGR-admin.log is opened. All server side log events will be written to this file.>

Here we have the first delay, up to 5 mins...

在这里,我们有第一个延迟,最多 5 分钟...

<1-Apr-2010 12:53:21 o'clock PM GMT-05:00> <Notice> <Security> <BEA-090082> <Security initializing using security realm myrealm.>
<1-Apr-2010 12:53:24 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STANDBY>
<1-Apr-2010 12:53:24 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING>
<1-Apr-2010 12:53:25 o'clock PM GMT-05:00> <Notice> <Log Management> <BEA-170027> <The server initialized the domain log broadcaster success
fully. Log messages will now be broadcasted to the domain log.>
<1-Apr-2010 12:53:25 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to ADMIN>
<1-Apr-2010 12:53:25 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RESUMING>
<1-Apr-2010 12:53:28 o'clock PM GMT-05:00> <Notice> <Security> <BEA-090171> <Loading the identity certificate and private key stored under t
he alias adminuialias from the jks keystore file /shared2/wldomains/beaadmd/LOGMGR/CustomIdentity.jks.>

And here is the second, again up to 5 mins.

这是第二个,同样长达 5 分钟。

<1-Apr-2010 12:58:56 o'clock PM GMT-05:00> <Notice> <Security> <BEA-090169> <Loading trusted certificates from the jks keystore file /shared
2/wldomains/beaadmd/LOGMGR/CustomTrust.jks.>
<1-Apr-2010 12:58:57 o'clock PM GMT-05:00> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure" is now listening on 192.168.56.102:7002 f
or protocols iiops, t3s, ldaps, https.>
<1-Apr-2010 12:58:57 o'clock PM GMT-05:00> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 192.168.56.102:8012 for pro
tocols iiop, t3, ldap, http.>
<1-Apr-2010 12:58:57 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000331> <Started WebLogic Admin Server "LOGMGR-admin" for domain "
LOGMGR" running in Development Mode>
<1-Apr-2010 12:58:57 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING>
<1-Apr-2010 12:58:57 o'clock PM GMT-05:00> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>

UPDATE

更新

I think I've got the track: it must be the randon seed initialization. That may explain why generating keyboard events release the server. I've made the thread dump, and one thread is in runnable state, but waiting:

我想我已经明白了:它必须是 randon 种子初始化。这可以解释为什么生成键盘事件会释放服务器。我已经进行了线程转储,一个线程处于可运行状态,但正在等待:

"[STANDBY] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=1 tid=0x0a7b06e8 nid=0xeda runnable [0x728a500
0..0x728a6d80]
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:194)
        at sun.security.provider.NativePRNG$RandomIO.readFully(NativePRNG.java:185)
        at sun.security.provider.NativePRNG$RandomIO.implGenerateSeed(NativePRNG.java:202)
        - locked <0x7d928c78> (a java.lang.Object)
        at sun.security.provider.NativePRNG$RandomIO.access0(NativePRNG.java:108)
        at sun.security.provider.NativePRNG.engineGenerateSeed(NativePRNG.java:102)
        at java.security.SecureRandom.generateSeed(SecureRandom.java:475)
        at weblogic.security.AbstractRandomData.ensureInittedAndSeeded(AbstractRandomData.java:83)

采纳答案by Vladimir Dyuzhev

SOLVED

解决了

Weblogic uses SecureRandom to init security subsystem. SecureRandom by default uses /dev/urandom device. For some reason, reading this device under VM comes to halt quite often. Generating console events helps to create more randomness, and release the WLS.

Weblogic 使用 SecureRandom 来初始化安全子系统。SecureRandom 默认使用 /dev/urandom 设备。出于某种原因,在 VM 下读取此设备经常停止。生成控制台事件有助于创建更多随机性并释放 WLS。

For the test purposes I have changed jre/lib/security/java.security file:

出于测试目的,我更改了 jre/lib/security/java.security 文件:

securerandom.source=file:/tmp/big.random.file

Weblogic now starts in 15 seconds.

Weblogic 现在在 15 秒内启动。

Since we do not test any security stuff in our VMs, the repeating seed is totally alright for us.

由于我们不在 VM 中测试任何安全性内容,因此重复种子对我们来说完全没问题。

回答by Ruan

Oracle has since created a Metalink note related to this The FMW Configuration Wizard Is Very Slow On Linux Virtual Environments. The Startup Of WLS Servers Is Also Very Slow. [ID 1344974.1]

Oracle 已经创建了与此相关的 Metalink 注释。 FMW 配置向导在 Linux 虚拟环境中非常慢。WLS 服务器的启动也很慢。[ID 1344974.1]

...

...

Solution 1 1) Download and install the following rpm: rng-utils-2.0-1.14.1.fc6.x86_64.rpm . Contact your vendor for download details. 2) Startup the random generator as follows: rngd -r /dev/urandom -o /dev/random -t 1

解决方案1 ​​1) 下载并安装以下rpm: rng-utils-2.0-1.14.1.fc6.x86_64.rpm 。有关下载详细信息,请联系您的供应商。2) 启动随机生成器如下: rngd -r /dev/urandom -o /dev/random -t 1

By default there seems to be a dependency on /dev/random on Linux which blocks until enough randomness is generated. Virtual servers with no mouse and keyboard attached can block significantly. In the command above input is taken from the unblocking /dev/urandom so the wait for randomness does not become an application bottleneck.

默认情况下,Linux 上似乎依赖于 /dev/random,它会阻塞直到生成足够的随机性。没有连接鼠标和键盘的虚拟服务器可能会严重阻塞。在上面的命令中,输入来自解除阻塞的 /dev/urandom,因此等待随机性不会成为应用程序瓶颈。

回答by twh1st

In case you have enterprise standard app servers without privileges to change your binaries you can add a JVM flag to overwrite wich random generator should be used. E.g.:

如果您拥有没有权限更改二进制文件的企业标准应用程序服务器,您可以添加一个 JVM 标志来覆盖应该使用的随机生成器。例如:

-Djava.security.egd=file:/dev/./urandom

That way you don't have to change any system settings.

这样您就不必更改任何系统设置。

回答by Chris Jefferson

Try install rngd. On modern systems with a hardware RNG, this will create enough entropy.

尝试安装rngd。在具有硬件 RNG 的现代系统上,这将产生足够的熵。