[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16292676#comment-16292676 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 I'm closing it , waiting to update it before reopening! :+1: > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16207231#comment-16207231 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user mtaylor commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic @franz1981 This has been open for some time now. Can you work together to resolve this, either by merging or closing. If this need significant refactory/impl work that is going to take some time then I suggest we close and reopen when it's ready. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16072209#comment-16072209 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic > So, right now the logic for missing measures is inside FlushSampleFlyweight.. while it should / should be at the buffer... The missing logic is already inside the buffer, while the FlushSampleFlyweight class is a struct-like class to write/read measurements over a ByteBuffer. > I have moved the file creationg to MultiCastBuffer. I'm (re)thinking about putting the file naming/location logic on the MulticastBuffer and maybe is not the best place there... To favour the separation of concerns I prefer to leave the buffer without any other logic than what is needed for the data structure to do its job. If different parts of the system will require to put all the counters in one file and/or build something more dynamic to allocate counters on demands, the MulticastBuffer (and unit tests) won't be touched by these changes. > Or maybe we could make this generic for not just the journal.. .and still have a single File. :100: This is a very good idea! > This could be extended to other measures.. E.G. Message sending and consuming... etc.. etc... Related to this thought, I'm thinking to release other perf counters for the broker (eg connection bytes sent/received?), but probably this will require: - to build different file location/naming strategies - to built a manager to allocate/release dinamically the counters - to build at least another type of IPC data structure without the missing recognition features (pretty simiilar to [AtomicCounter](https://github.com/real-logic/Agrona/blob/master/agrona/src/main/java/org/agrona/concurrent/status/AtomicCounter.java)) Probably using directly Agrona's [CountersManager](https://github.com/real-logic/agrona/blob/master/agrona/src/main/java/org/agrona/concurrent/status/CountersManager.java) could be a good idea. It's a perfect fit for single Long sized messages where isn't needed the timestamp of the message and is not required to know any accuracy of the sample (aka missing samples). When you'll be online we could talk about it (I've a demo to show you about it) :+1: > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16070403#comment-16070403 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 these are some suggested changes: https://github.com/clebertsuconic/activemq-artemis/commit/c1490de200d373925f455b79c561d535a62f7248 > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16070401#comment-16070401 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 I think this could be made a bit more generic.. So I have moved the file creationg to MultiCastBuffer. This could be extended to other measures.. E.G. Message sending and consuming... etc.. etc... So, right now the logic for missing measures is inside FlushSampleFlyweight.. while it should / should be at the buffer... I still think we should name this PipedBuffer.. you could create many pipes. .one for the journal, one for messages.. .etc.. etc... it's a pipe of information.. where you can have multiple receivers... if you create a chain of information (I'm calling pipe.. we can find other names) for messages.. it could be there... Or maybe we could make this generic for not just the journal.. .and still have a single File. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16069125#comment-16069125 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic yep, let's talk tomorrow. I've just tried now but I've no issues at all so probably there is something I'm missing... > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16069114#comment-16069114 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @franz1981 I tried.. cannot run .. because of the lock... lets just talk over tomorrow.. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16069102#comment-16069102 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic but I've run it already concurrently with a server...Simply I've used a different bash console. That's how I've collected the data I've used for the doc I've not seen any lock on the server..the only interaction with the server is by reading the configuration and the MulticastBuffer...or there are other points? > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16069095#comment-16069095 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @franz1981 you are misunderstanding me.. the CLI won't ever run concurrently with the server.. it's an issue on your CLI.. you are holding the lock on the server.. hence you're not able to capture it. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16069087#comment-16069087 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic Maybe I've not understand your comment...but to capture data I use lock-free inter process communication primitives,hence no lock is involved because locks works only in the same process. Please look at the MultiSampleBuffer implementstion: it is the core of the whole process. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16069074#comment-16069074 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 `` It is able to capture samples from a running live serve``` ^^ ok that then confirms an issue with your PR. Your CLI is trying to lock the server.. so you wouldn't ever be able to capture anything from a server as the CLI tool will never hold the lock. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16068938#comment-16068938 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic It is able to capture samples from a running live server, but the server must be first started with the proper configuration. It is simply not possible to make it light as it is with other options: that's why I've build the MulticastBuffer to not backpressure the broker when the sampling profiler is not reading data. Making it differently will at least add branch mispredictions and JVM compile deoptimizations in the hot paths. Hence you can let a broker be configured to emit performance counters data with no performance impact, making it suitable to be used in production too. It is really like most perf profilers work: if you want profiling you need at least some debug info to capture meaningful data. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16068924#comment-16068924 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @franz1981 How i thought it worked.. you would be able to enable profile on a live server.. and be able to capture stuff from the running server. if that's not how it works.. perhaps we could change it to be that way! > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16068899#comment-16068899 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic I've fixed the typo error and about "how it works" we could talk tomorrow about it :+1: I'm happy you like the doc :) > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16068696#comment-16068696 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r124868500 --- Diff: docs/user-manual/en/tools.md --- @@ -220,5 +233,115 @@ COMMANDS With --bindings option, The folder used for bindings (default from broker.xml) +perf-journal-stat +Provide sampling of performance counters of a profiled journal + +With --separator option, The column separator, whitespace if not +specified + +With --broker option, This would override the broker configuration +from the bootstrap + +With --verbose option, Adds more information on the execution + +With --bytes option, Add bytes flushed column in the CSV output, +false if not defined + +With --freq option, Profile at this frequency (Hz) or will use half +of the configured Journal timeout + +With --raw-time option, Uses raw timestamps, false if not defined + +With --out option, Print the CSV output in a text file or stdout if +not defined + +With --in option, The input counter file to be used to sample +profiled data + + +``` + +## The `perf-journal-stat` tool + +This CLI command allows to sample the journal performance counters events of a broker [configured](configuration-index.md) to emit them. + +This sampling profiling tool shares most features of Linux's [`perf-tools`](https://perf.wiki.kernel.org/index.php/Main_Page): + +- (costantly) lightweight while profiling +- (negligible) no performance hit while not profiling +- constant and very low memory footprint (i.e. just one [OS Page](https://en.wikipedia.org/wiki/Page_(computer_memory)) size in total) +- no Network stack involved (i.e. only Inter-Process Communication) +- no external dependencies + +The next simple example will illustrate how to use it, but it could be easily integrated with Nagios or any custom toolchain. + +### Gnuplot example + +Run while a proper [configured](configuration-index.md) broker is running: +``` +$ ./perf-journal-stat --verbose --freq 2 --out ~/Documents/journal_trace.csv --- End diff -- The docs is great.. small mistake there.. but I'm having some issues on how to operate this.. lets talk offline.. and update here later. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16068622#comment-16068622 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r124857265 --- Diff: docs/user-manual/en/tools.md --- @@ -220,5 +233,115 @@ COMMANDS With --bindings option, The folder used for bindings (default from broker.xml) +perf-journal-stat +Provide sampling of performance counters of a profiled journal + +With --separator option, The column separator, whitespace if not +specified + +With --broker option, This would override the broker configuration +from the bootstrap + +With --verbose option, Adds more information on the execution + +With --bytes option, Add bytes flushed column in the CSV output, +false if not defined + +With --freq option, Profile at this frequency (Hz) or will use half +of the configured Journal timeout + +With --raw-time option, Uses raw timestamps, false if not defined + +With --out option, Print the CSV output in a text file or stdout if +not defined + +With --in option, The input counter file to be used to sample +profiled data + + +``` + +## The `perf-journal-stat` tool + +This CLI command allows to sample the journal performance counters events of a broker [configured](configuration-index.md) to emit them. + +This sampling profiling tool shares most features of Linux's [`perf-tools`](https://perf.wiki.kernel.org/index.php/Main_Page): + +- (costantly) lightweight while profiling +- (negligible) no performance hit while not profiling +- constant and very low memory footprint (i.e. just one [OS Page](https://en.wikipedia.org/wiki/Page_(computer_memory)) size in total) +- no Network stack involved (i.e. only Inter-Process Communication) +- no external dependencies + +The next simple example will illustrate how to use it, but it could be easily integrated with Nagios or any custom toolchain. + +### Gnuplot example + +Run while a proper [configured](configuration-index.md) broker is running: +``` +$ ./perf-journal-stat --verbose --freq 2 --out ~/Documents/journal_trace.csv --- End diff -- typo? wasn't this supposed to be ./artemis perf-journal-state ??? also: I thought you would run the perf tool against a running broker? > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16067112#comment-16067112 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic I've finally changed the name of MulticastSample into MulticastBuffer and added a doc chapter with an example, but I need a review on it, in particular by someone that doesn't know anything about how the profiler works!wdyt? > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16065127#comment-16065127 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @franz1981 the only reason I didn't merge this is that this would be a hidden feature... no docs.. can you add a doc chapter about this? > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16043493#comment-16043493 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r121005604 --- Diff: artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/journal/JournalSamplingProfiler.java --- @@ -0,0 +1,307 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.cli.commands.tools.journal; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.PrintStream; +import java.util.Arrays; +import java.util.Comparator; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.LockSupport; + +import io.airlift.airline.Command; +import io.airlift.airline.Option; +import org.apache.activemq.artemis.cli.commands.ActionContext; +import org.apache.activemq.artemis.cli.commands.Configurable; +import org.apache.activemq.artemis.core.config.impl.FileConfiguration; +import org.apache.activemq.artemis.core.io.buffer.counters.FlushSampleFlyweight; +import org.apache.activemq.artemis.core.io.buffer.counters.Profiler; +import org.apache.activemq.artemis.utils.collections.MulticastSample; + +@Command(name = "perf-journal-stat", description = "Provide sampling of performance counters of a profiled journal") +public class JournalSamplingProfiler extends Configurable { --- End diff -- would be too much to ask renaming this to PerfJournalStat ? :) don't mean to be annoying :) > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16042895#comment-16042895 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 I need to add some docs about the CLI command usage and improves some class names (eg MulticastSample). It can be done in a separated PR too > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16032693#comment-16032693 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic It is something I think can over-complicate the environment setting for a user and could potentially makes the mechanism less efficient too. That's why: - the file is not a "real" file on Linux (it uses [/dev/shm](https://www.cyberciti.biz/tips/what-is-devshm-and-its-practical-usage.html)) to avoid potential costs on page swapping/writeback of the dirty region, hence the position/name could not be bound to a fixed configured position - the file need to be zeroed on broker start and to make this behaviour safer to be implemented I prefer to let the file system do it for me, creating a new file with `pid-date of creation` info on the name (+ File::deleteOnExit), hence a fixed file name is not an option here too wdyt? > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16031353#comment-16031353 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @franz1981 I was just looking from the POV of the code.. TimedBuffer->profiler (whatever the name is) is instantiating an output file. shouldn't it be configurable for the running server? the CLI to read it could also get the file from the configuration if you're running from the instance. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16030839#comment-16030839 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 @clebertsuconic > doc how to use this... (is that internal only)? :+1: You're right, but what could be a good place where put it? It is like the other CLI commands, so it can be used by any user, but I suspect that perf engineers and devOps engineers are the typical audience for it. A possible use case is to build a Cron job that during the day run it and use the extracted log to feed a time series database, an Elastic Search repository or anything suitable to collect latency samples. After the doc probably most of the aspect of the profiler will be clear, it uses an approach similar to perf tools on *nix. > how to read the file... The *profiler* (ie FlushProfiler) produces only one file of 4K fixed size in `/dev/shm` or in the Artemis configured `tmp` dir: this file is not built to be read by humans or other user-provided tools right now. > I am a bit confused with the file format... The *sampler* (ie the CLI command) samples the data on the file written by the *profiler* and produces a CSV US-ASCII text trace with `\n` pairs. For example, using the default parameters: ``` 0 27729 4534870 32709 8443760 27556 15067045 44260 16290386 18286 17146291 14201 17908462 8243 19349526 33071 24171483 79496 27741532 18992 ... ``` This trace, if collected in a file, can be used directly with `gnuplot` to plot this: ![image](https://cloud.githubusercontent.com/assets/13125299/26622962/72d67788-45ec-11e7-9e23-a6e1c054b75f.png) But it won't be saved in a file if not configured properly. > Also, it would be nice to be allowed to configure where the file would be generated. Currently the user running the *sampler* could choose where put the trace recorded from the profiler using the `--out` parameter: ``` @Option(name = "--out", description = "The output text csv stat file or stdout if not defined") public String fileOut; ``` By default the *sampler* command prints on `stdout` the CSV trace and on `stderr` a real time log of the statistics of the running sampler, in the form: ``` Duration 1003ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1001ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1001ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1001ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1000ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1001ms - 657 sample - 4 lost - 780 kB - 657 sync Duration 1002ms - 3,397 sample - 0 lost - 4,413 kB - 3,397 sync Duration 1001ms - 4,328 sample - 14 lost - 5,827 kB - 4,328 sync Duration 1001ms - 4,807 sample - 2 lost - 6,513 kB - 4,807 sync Duration 1000ms - 2,100 sample - 0 lost - 2,847 kB - 2,100 sync Duration 1001ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1001ms - 2,994 sample - 0 lost - 4,051 kB - 2,994 sync Duration 1001ms - 5,165 sample - 0 lost - 7,001 kB - 5,165 sync Duration 1000ms - 5,244 sample - 0 lost - 7,116 kB - 5,244 sync Duration 1001ms - 1,647 sample - 0 lost - 2,230 kB - 1,647 sync Duration 1001ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1000ms - 3,237 sample - 0 lost - 4,381 kB - 3,237 sync Duration 1001ms - 4,892 sample - 0 lost - 6,616 kB - 4,892 sync Duration 1001ms - 4,543 sample - 0 lost - 6,120 kB - 4,543 sync Duration 1000ms - 2,468 sample - 0 lost - 3,281 kB - 2,468 sync Duration 1001ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1001ms - 1,747 sample - 1 lost - 2,374 kB - 1,747 sync Duration 1000ms - 5,318 sample - 0 lost - 7,224 kB - 5,318 sync Duration 1001ms - 5,327 sample - 0 lost - 7,233 kB - 5,327 sync Duration 1001ms - 2,628 sample - 0 lost - 3,565 kB - 2,628 sync Duration 1000ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1001ms - 2,553 sample - 0 lost - 3,451 kB - 2,553 sync Duration 1001ms - 5,243 sample - 0 lost - 7,108 kB - 5,243 sync Duration 1001ms - 5,162 sample - 0 lost - 7,008 kB - 5,162 sync Duration 1000ms - 2,087 sample - 0 lost - 2,831 kB - 2,087 sync Duration 1001ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1001ms - 3,011 sample - 0 lost - 4,090 kB - 3,011 sync Duration 1001ms - 6,720 sample - 0 lost - 9,116 kB - 6,720 sync Duration 1000ms - 5,306 sample - 0 lost - 7,193 kB - 5,306 sync Duration 1001ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1000ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1001ms - 0 sample - 0 lost - 0 bytes - 0 sync Duration 1000ms - 0 sample - 0 lost - 0 bytes - 0 sync
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16030746#comment-16030746 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r119284924 --- Diff: artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/TimedBuffer.java --- @@ -93,10 +82,10 @@ public TimedBuffer(final int size, final int timeout, final boolean logRates) { bufferSize = size; - this.logRates = logRates; - if (logRates) { --- End diff -- Good point!I'll change the name in something more appropriate :+1: > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16030352#comment-16030352 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user clebertsuconic commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 what I am missing: - doc how to use this... (is that internal only)? - how to read the file... I am a bit confused with the file format... Also, it would be nice to be allowed to configure where the file would be generated. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028801#comment-16028801 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 it is really a curse! Anyway thanks for the feedbacks...in particular for coding style and names...are 2 parts that make a big difference in usability of a feature, from the pov of dev/user! > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028798#comment-16028798 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r119025093 --- Diff: artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/journal/StatJournal.java --- @@ -0,0 +1,288 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.cli.commands.tools.journal; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.PrintStream; +import java.util.Arrays; +import java.util.Comparator; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.LockSupport; + +import io.airlift.airline.Command; +import io.airlift.airline.Option; +import org.apache.activemq.artemis.cli.commands.ActionContext; +import org.apache.activemq.artemis.cli.commands.Configurable; +import org.apache.activemq.artemis.core.config.impl.FileConfiguration; +import org.apache.activemq.artemis.core.io.buffer.counters.FlushSampleFlyweight; +import org.apache.activemq.artemis.core.io.buffer.counters.Profiler; +import org.apache.activemq.artemis.utils.collections.MulticastSample; + +@Command(name = "stat", description = "Provide performance statistics around the journal usage") --- End diff -- It is a weird name...Do you have something in mind? It is a journal sampling profiler and the ideas on how it works are taken from: - https://linux.die.net/man/1/perf-record - https://github.com/jvm-profiling-tools/honest-profiler But in the future I'm planning to provide a single CLI command that could collect perf data using a filter of some kind or different CLI commands for macro profiling areas ...it is something I want to discuss on the dev list... > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028795#comment-16028795 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r119024088 --- Diff: artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/counters/Profiler.java --- @@ -0,0 +1,72 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.core.io.buffer.counters; + +import java.io.File; +import java.io.IOException; + +import org.apache.activemq.artemis.journal.ActiveMQJournalLogger; + +/** + * Factory class to instantiate {@link FlushProfiler}s classes. + */ +public final class Profiler { + + private static final FlushProfiler BLACK_HOLE_PROFILER = new FlushProfiler() { --- End diff -- The ``default`` method idea is good IMHO when you've methods not bounded each others, but when you have methods that makes sense to be implemented (and called) together (eg Lock::lock and Lock::unlock), I prefer to use normal methods and force the implementation to have both. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028794#comment-16028794 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user franz1981 commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r119023463 --- Diff: artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/TimedBuffer.java --- @@ -93,10 +82,10 @@ public TimedBuffer(final int size, final int timeout, final boolean logRates) { bufferSize = size; - this.logRates = logRates; - if (logRates) { - logRatesTimer = new Timer(true); + this.flushProfiler = Profiler.instrumented(); + } else { + this.flushProfiler = Profiler.none(); --- End diff -- About the compiler we're "lucky", because the noop impl will be inlined (is monomorphic with no code inside) and then wiped away (verified using JitWatch), leaving the TimedBuffer clean and without null checks too. The guard statement that can be compiled out AFAIK are the ones that rely on final static fields, while normal instance members do not receive the same treatment from the JIT, sadly. It is a different coding style: like having a null logger instance member or a noop logger implementation...wdyt? > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028659#comment-16028659 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user michaelandrepearce commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 PR raised to hopefully end the sevntu curse (aka use new version published now in maven central) https://github.com/apache/activemq-artemis/pull/1299 > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028657#comment-16028657 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user michaelandrepearce commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r118992513 --- Diff: artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/counters/Profiler.java --- @@ -0,0 +1,72 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.core.io.buffer.counters; + +import java.io.File; +import java.io.IOException; + +import org.apache.activemq.artemis.journal.ActiveMQJournalLogger; + +/** + * Factory class to instantiate {@link FlushProfiler}s classes. + */ +public final class Profiler { + + private static final FlushProfiler BLACK_HOLE_PROFILER = new FlushProfiler() { --- End diff -- or even remove if go with setting to null and separate guard statements > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028614#comment-16028614 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user michaelandrepearce commented on the issue: https://github.com/apache/activemq-artemis/pull/1295 Looks good +1, comments are just comments, I'm happy with as is. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028609#comment-16028609 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user michaelandrepearce commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r118982819 --- Diff: artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/TimedBuffer.java --- @@ -93,10 +82,10 @@ public TimedBuffer(final int size, final int timeout, final boolean logRates) { bufferSize = size; - this.logRates = logRates; - if (logRates) { --- End diff -- NIT: is there a better name for this, i can't think of one, but name just seems misleading a little, as actually this is enabling a profiler not logging out anything to the std log file. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028611#comment-16028611 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user michaelandrepearce commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r118983050 --- Diff: artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/tools/journal/StatJournal.java --- @@ -0,0 +1,288 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.cli.commands.tools.journal; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.PrintStream; +import java.util.Arrays; +import java.util.Comparator; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.LockSupport; + +import io.airlift.airline.Command; +import io.airlift.airline.Option; +import org.apache.activemq.artemis.cli.commands.ActionContext; +import org.apache.activemq.artemis.cli.commands.Configurable; +import org.apache.activemq.artemis.core.config.impl.FileConfiguration; +import org.apache.activemq.artemis.core.io.buffer.counters.FlushSampleFlyweight; +import org.apache.activemq.artemis.core.io.buffer.counters.Profiler; +import org.apache.activemq.artemis.utils.collections.MulticastSample; + +@Command(name = "stat", description = "Provide performance statistics around the journal usage") --- End diff -- maybe journal-stat?, stat seems a little too generic, e.g. what if other stat tools added for other parts? > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028612#comment-16028612 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user michaelandrepearce commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r118982923 --- Diff: artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/counters/Profiler.java --- @@ -0,0 +1,72 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.core.io.buffer.counters; + +import java.io.File; +import java.io.IOException; + +import org.apache.activemq.artemis.journal.ActiveMQJournalLogger; + +/** + * Factory class to instantiate {@link FlushProfiler}s classes. + */ +public final class Profiler { + + private static final FlushProfiler BLACK_HOLE_PROFILER = new FlushProfiler() { --- End diff -- Why not make use of java 8 default methods and define in the interface to have default methods, that do nothing. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028610#comment-16028610 ] ASF GitHub Bot commented on ARTEMIS-1185: - Github user michaelandrepearce commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1295#discussion_r118982620 --- Diff: artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/buffer/TimedBuffer.java --- @@ -288,7 +266,14 @@ private void flush(final boolean force) { buffer.getBytes(0, bufferToFlush); final List ioCallbacks = callbacks == null ? Collections.emptyList() : callbacks; -bufferObserver.flushBuffer(bufferToFlush, pendingSyncs.get() > 0, ioCallbacks); + +final boolean requiredSync = pendingSyncs.get() > 0; +this.flushProfiler.onStartFlush(bufferToFlush.position(), requiredSync); --- End diff -- why not a guard statement here? so if disabled the JVM would simply compile out the code when disabled. > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ARTEMIS-1185) Inter-Process Journal Sampler Profiler + CLI command
[ https://issues.apache.org/jira/browse/ARTEMIS-1185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16028117#comment-16028117 ] ASF GitHub Bot commented on ARTEMIS-1185: - GitHub user franz1981 opened a pull request: https://github.com/apache/activemq-artemis/pull/1295 ARTEMIS-1185 Inter-Process Journal Sampler Profiler + CLI command You can merge this pull request into a Git repository by running: $ git pull https://github.com/franz1981/activemq-artemis real_time_journal_latency Alternatively you can review and apply these changes as the patch at: https://github.com/apache/activemq-artemis/pull/1295.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #1295 commit 87b59431dbab8d987d217bb9bcdaac688bd5f120 Author: Francesco NigroDate: 2017-05-17T08:35:35Z ARTEMIS-1185 Inter-Process Journal Sampler Profiler + CLI command > Inter-Process Journal Sampler Profiler + CLI command > > > Key: ARTEMIS-1185 > URL: https://issues.apache.org/jira/browse/ARTEMIS-1185 > Project: ActiveMQ Artemis > Issue Type: New Feature > Components: Broker >Reporter: Francesco Nigro >Assignee: Francesco Nigro >Priority: Minor > > It provides a sampling profiler on buffered ASYNCIO/NIO based journals. > The profiling has a minimal cost in term of CPU time for each sample (the > dominant costs are System.nanoTime() and a single cache line invalidation) > and total memory footprint (~OS page size in bytes). > A proper CLI command activates a sampler to collect (ie CSV) the profiled > data, showing the precision of the sampling: data loss is not considered a > failure condition. -- This message was sent by Atlassian JIRA (v6.3.15#6346)