I am able to reproduce the delay using 8.8.8.8. I'm not sure how the JVM's
MBean server avoids this. Feel free to open a Jira to track this.


Justin

On Thu, Jan 23, 2025 at 11:34 AM Vilius Šumskas <vilius.sums...@rivile.lt>
wrote:

> Can you try with -Djava.rmi.server.hostname=some.random.ip instead of
> hostname?
>
> I tried with "foo" hostname and there is no delay, but switched to 8.8.8.8
> and delay is back again. Actually specifying any IP not under host's
> interface produces the same result.
>
> --
>     Vilius
>
> -----Original Message-----
> From: Justin Bertram <jbert...@apache.org>
> Sent: Thursday, January 23, 2025 5:58 PM
> To: users@activemq.apache.org
> Subject: Re: JMX exporter in Docker image
>
> From what I can tell the delay is shown in the first thread dump [1]:
>
>  "main" #1 prio=5 os_prio=0 cpu=2709.38ms elapsed=33.95s
> tid=0x00007f723002ae60 nid=0x33633 runnable  [0x00007f7237121000]
>     java.lang.Thread.State: RUNNABLE
>          at sun.nio.ch.Net.poll(java.base@17.0.13/Native Method)
>          at sun.nio.ch.NioSocketImpl.park(java.base@17.0.13
> /NioSocketImpl.java:186)
>          at sun.nio.ch.NioSocketImpl.park(java.base@17.0.13
> /NioSocketImpl.java:195)
>          at sun.nio.ch.NioSocketImpl.implRead(java.base@17.0.13
> /NioSocketImpl.java:319)
>          at sun.nio.ch.NioSocketImpl.read(java.base@17.0.13
> /NioSocketImpl.java:355)
>          at sun.nio.ch.NioSocketImpl$1.read(java.base@17.0.13
> /NioSocketImpl.java:808)
>          at java.net.Socket$SocketInputStream.read(java.base@17.0.13
> /Socket.java:966)
>          at java.io.BufferedInputStream.fill(java.base@17.0.13
> /BufferedInputStream.java:244)
>          at java.io.BufferedInputStream.read(java.base@17.0.13
> /BufferedInputStream.java:263)
>          - locked <0x000000009f631900> (a java.io.BufferedInputStream)
>          at java.io.DataInputStream.readUnsignedByte(java.base@17.0.13
> /DataInputStream.java:288)
>          at java.io.DataInputStream.readByte(java.base@17.0.13
> /DataInputStream.java:268)
>          at sun.rmi.transport.StreamRemoteCall.executeCall(java.rmi@17.0.13
> /StreamRemoteCall.java:241)
>          at sun.rmi.server.UnicastRef.invoke(java.rmi@17.0.13
> /UnicastRef.java:381)
>          at sun.rmi.registry.RegistryImpl_Stub.bind(java.rmi@17.0.13
> /RegistryImpl_Stub.java:73)
>          at
> com.sun.jndi.rmi.registry.RegistryContext.bind(jdk.naming.rmi@17.0.13
> /RegistryContext.java:157)
>          at
> com.sun.jndi.toolkit.url.GenericURLContext.bind(java.naming@17.0.13
> /GenericURLContext.java:243)
>          at javax.naming.InitialContext.bind(java.naming@17.0.13
> /InitialContext.java:417)
>          at
>
> javax.management.remote.rmi.RMIConnectorServer.bind(java.management.rmi@17.0.13
> /RMIConnectorServer.java:693)
>          at
>
> javax.management.remote.rmi.RMIConnectorServer.start(java.management.rmi@17.0.13
> /RMIConnectorServer.java:476)
>          - locked <0x000000009f7facf8> (a
> javax.management.remote.rmi.RMIConnectorServer)
>          at
>
> org.apache.activemq.artemis.core.server.management.ConnectorServerFactory.init(ConnectorServerFactory.java:226)
>          at
>
> org.apache.activemq.artemis.core.server.management.ManagementConnector.start(ManagementConnector.java:96)
>          at
>
> org.apache.activemq.artemis.core.server.management.ManagementContext.start(ManagementContext.java:56)
>          - locked <0x00000000809db358> (a
> org.apache.activemq.artemis.core.server.management.ManagementContext)
>          at
> org.apache.activemq.artemis.cli.commands.Run$1.preActivate(Run.java:96)
>          at
>
> org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.callPreActiveCallbacks(ActiveMQServerImpl.java:3117)
>          at
>
> org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.initialisePart1(ActiveMQServerImpl.java:3263)
>          - locked <0x000000009fb77060> (a
> org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl)
>          at
>
> org.apache.activemq.artemis.core.server.impl.SharedStorePrimaryActivation.run(SharedStorePrimaryActivation.java:66)
>          at
>
> org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.internalStart(ActiveMQServerImpl.java:742)
>          at
>
> org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.start(ActiveMQServerImpl.java:632)
>          - locked <0x000000009fb77060> (a
> org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl)
>          at
>
> org.apache.activemq.artemis.integration.FileBroker.start(FileBroker.java:66)
>          - locked <0x00000000809d94e8> (a
> org.apache.activemq.artemis.integration.FileBroker)
>          at
> org.apache.activemq.artemis.cli.commands.Run.execute(Run.java:130)
>          at
> org.apache.activemq.artemis.cli.Artemis.internalExecute(Artemis.java:222)
>          at
> org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:168)
>          at
> jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@17.0.13
> /Native
> Method)
>          at
> jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@17.0.13
> /NativeMethodAccessorImpl.java:77)
>          at
> jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@17.0.13
> /DelegatingMethodAccessorImpl.java:43)
>          at java.lang.reflect.Method.invoke(java.base@17.0.13
> /Method.java:569)
>          at
> org.apache.activemq.artemis.boot.Artemis.execute(Artemis.java:152)
>          at org.apache.activemq.artemis.boot.Artemis.main(Artemis.java:64)
>
> The underlying javax.management.remote.rmi.RMIConnectorServer is
> attempting to "bind" which appears to involve creating a Socket and reading
> some data from it.
>
> I've tried reproducing this by specifying "-Djava.rmi.server.hostname=foo"
> and:
>
>   <connector connector-port="1099" connector-host="0.0.0.0"
> rmi-registry-port="1100" />
>
> However, there is no delay in broker start-up.
>
> Do you know of any way I can reproduce what you're seeing?
>
>
> Justin
>
> [1] https://p.defau.lt/?WV75z6Vajriy_tmBpASMrg
>
> On Thu, Jan 23, 2025 at 3:50 AM Vilius Šumskas <vilius.sums...@rivile.lt>
> wrote:
>
> > >> ...the broker hangs on startup for ~2 minutes and 10 seconds every
> > time...
> >
> > > Can you get a thread dump during the delay and provide it here? The
> > logging doesn't really indicate what's going on behind the scenes. I
> > just did a quick proof-of-concept using a similar configuration to
> > yours and I didn't see any delay.
> >
> > Sure. This is a thread dump during the delay:
> > https://p.defau.lt/?WV75z6Vajriy_tmBpASMrg
> > This is a thread dump just right after delay passes:
> > https://p.defau.lt/?_yKMZJpdrGhfAzc2cy_t6A
> > And this is a thread dump when broker starts completely:
> > https://p.defau.lt/?x5MSCZE9kZknAEAKi1UORg
> >
> > If I'm reading it correctly thread "RMI RenewClean-[35.214.206.170:1100
> ]"
> > #26 is waiting for something. As mentioned, the IP here is the
> > external NAT IP of the host, i.e. it is not assigned to any interface on
> the broker.
> >
> > --
> >     Vilius
> >
> > -----Original Message-----
> > From: Justin Bertram <jbert...@apache.org>
> > Sent: Wednesday, January 22, 2025 7:16 PM
> > To: users@activemq.apache.org
> > Subject: Re: JMX exporter in Docker image
> >
> > > ...I had issues with configuration so decided to look into JMX
> > > exporter
> > as a workaround.
> >
> > To be clear, the "JMX exporter" [1] is a tool provided by Prometheus
> > to read values from JMX MBeans and export them to a format which
> > Prometheus can consume (i.e. scrape via HTTP). It has nothing to do
> > with allowing remote JMX connectivity to a JVM which appears to be what
> you really want.
> >
> > > Setting <connector connector-port="1099" rmi-registry-port="1099" />
> > produces "port already used" bind errors.
> >
> > It's possible to use the same values here when using the JVM's JMX
> > connectivity so I expect it should be possible to do the same with our
> > MBean server as well (although I'm not sure specifically how at this
> > point). Feel free to open a ticket for this.
> >
> > > ...the broker hangs on startup for ~2 minutes and 10 seconds every
> > time...
> >
> > Can you get a thread dump during the delay and provide it here? The
> > logging doesn't really indicate what's going on behind the scenes. I
> > just did a quick proof-of-concept using a similar configuration to
> > yours and I didn't see any delay.
> >
> > > Some JMX software, for example VisualVM, cannot build its window for
> > > JMX
> > browsing unless vm* methods are added to role-access list.
> >
> > Can you provide more details about this? I just started up VisualVM
> > and created a new (remote) JMX connection to a broker and it was able
> > to browse MBeans no problem.
> >
> >
> > Justin
> >
> > [1] https://github.com/prometheus/jmx_exporter
> >
> > On Tue, Jan 14, 2025 at 5:31 PM Vilius Šumskas
> > <vilius.sums...@rivile.lt>
> > wrote:
> >
> > > Yes, I've read documentation regarding JMX management, but I had
> > > issues with configuration so decided to look into JMX exporter as a
> > workaround.
> > >
> > > I also saw your suggestion regarding Prometheus plugin in another
> > > thread, and will definitely try it, but I wanted to try JMX first as
> > > there are much more monitoring and alerting dashboard templates
> > > available. Most of the templates use JMX metric keys, so I thought
> > > this would save me some time later.
> > >
> > > Anyway, my original issues with JMX are:
> > > 1. Setting <connector connector-port="1099" rmi-registry-port="1099"
> > > /> produces "port already used" bind errors. I can only set these
> > > parameters to two different ports. It's not a big deal, but one
> > > needs to know that both ports needs to be allowed in the firewall
> > > then, and we have to keep in mind that RMI registry port traffic is
> > > plaintext by
> > default.
> > > 2. If I set <connector connector-port="1099" connector-host="0.0.0.0"
> > > rmi-registry-port="1100" /> and add
> > > -Djava.rmi.server.hostname=<publicIPbeforeNAT> to artemis.profile,
> > > the broker hangs on startup for ~2 minutes and 10 seconds every time
> at:
> > > 2025-01-14 22:49:38,308 INFO
> > > [org.apache.activemq.artemis.core.server]
> > > AMQ221006: Waiting to obtain primary lock
> > > 2025-01-14 22:51:50,703 INFO
> > > [org.apache.activemq.artemis.core.server]
> > > AMQ221012: Using AIO Journal
> > >
> > > Looks like some kind of TCP timeout in play. Ports can match and I
> > > don't experience this delay if I use standard JVM agent instead, i.e.
> > > completely disable authorization and custom connector in
> > > management.xml, as suggested in the documentation, and use:
> > > -Dcom.sun.management.jmxremote.ssl=false
> > > -Dcom.sun.management.jmxremote.authenticate=false
> > > -Dcom.sun.management.jmxremote.port=1099
> > > -Dcom.sun.management.jmxremote.rmi.port=1099
> > > -Djava.rmi.server.hostname=<publicIPbeforeNAT>
> > > -Dcom.sun.management.jmxremote.local.only=false
> > > These first two issues are only reproducible with Artemis' custom
> > > JMX connector.
> > >
> > > 3. Some JMX software, for example VisualVM, cannot build its window
> > > for JMX browsing unless vm* methods are added to role-access list. I
> > > didn't investigate further because of issue #2 it's too slow to
> > > debug, but I guess it's missing access to some informational
> > > actions, like
> > maybe "vmInfo".
> > >
> > > Should I create tickets for all these issues?
> > >
> > > --
> > >     Vilius
> > >
> > > -----Original Message-----
> > > From: Justin Bertram <jbert...@apache.org>
> > > Sent: Tuesday, January 14, 2025 7:22 PM
> > > To: users@activemq.apache.org
> > > Subject: Re: JMX exporter in Docker image
> > >
> > > You can enable remote JMX connectivity by modifying management.xml
> > > as described in this documentation [1]. Of course you'd need to
> > > expose whatever port you're using for remote JMX via Docker.
> > >
> > > The thing with port 9404 does appear to be a bug. These days we
> > > recommend folks use the pluggable broker metrics [2] (for which
> > > there is a Prometheus plugin - accessible via the web port 8161).
> > >
> > >
> > > Justin
> > >
> > > [1]
> > >
> > > https://activemq.apache.org/components/artemis/documentation/latest/
> > > ma
> > > nagement.html#remote-jmx-access
> > > [2]
> > >
> > > https://activemq.apache.org/components/artemis/documentation/latest/
> > > me
> > > trics.html#metrics
> > >
> > > On Tue, Jan 14, 2025 at 3:37 AM Vilius Šumskas
> > > <vilius.sums...@rivile.lt>
> > > wrote:
> > >
> > > > Hi,
> > > >
> > > > I‘m trying to configure JMX remoting in official Artemis Docker
> image.
> > > > I see that Docker image has port 9404 exposed which indicates JMX
> > > > Prometheus exporter, but I cannot find any information how to
> > > > activate it or even the exporter JAR in the image itself. Is this
> > > > a bug left from
> > > >
> https://github.com/vromero/activemq-artemis-docker/blob/master/README.
> > > > md#57-prometheus-metrics
> > > > or I’m missing something?
> > > >
> > > > --
> > > >     Vilius
> > > >
> > > >
> > >
> > > --------------------------------------------------------------------
> > > - To unsubscribe, e-mail: users-unsubscr...@activemq.apache.org
> > > For additional commands, e-mail: users-h...@activemq.apache.org For
> > > further information, visit: https://activemq.apache.org/contact
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@activemq.apache.org
> > For additional commands, e-mail: users-h...@activemq.apache.org For
> > further information, visit: https://activemq.apache.org/contact
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@activemq.apache.org
> For additional commands, e-mail: users-h...@activemq.apache.org
> For further information, visit: https://activemq.apache.org/contact
>
>

Reply via email to