Comments (1)
Well, it's an internal API and not "officially supported", intended for debugging concurrency, but let me describe it here anyway.
FlightRecorder is an in-memory log. For every thread there is a cyclical buffer to which records are written with timestamps (so as not to introduce any contention among threads). When the recorder is dumped, the threads' recorders are merged based on their timestamps.
The records are turned into strings only when the recorder is dumped, so when recording mutable objects, the wrong values might be dumped. If that's the case, an object may implement co.paralleluniverse.common.monitoring.RecordingDouble
, that returns a cloned, immutable object. If a RecordingDouble is found in the record, its double is recorded.
When recording is turned on, all messages sent or received on channels or actors are recorded, as well as lots of internal values. Recordings are made with a "level" – the higher the level, the more detailed the recordings. For most purposes, turning on recording at level 1 is more than enough.
To turn on recording, the following system properties are used:
"co.paralleluniverse.debugMode"
– must be set to"true"
for recording to work."co.paralleluniverse.globalFlightRecorder"
– should be set to"true"
."co.paralleluniverse.monitoring.flightRecorderLevel"
– the recording level."1"
is enough."co.paralleluniverse.monitoring.flightRecorderSize"
– the size (in records) of each thread's buffer."co.paralleluniverse.flightRecorderDumpFile"
– the name of the default dump file
When a program running in debug mode terminates, the flight recorder is automatically dumped to the default dump file (gzipped).
You can programmatically dump a recording with co.paralleluniverse.common.util.Debug.dumpRecorder()
, in which case the default file will be used, or you can supply a different name with dumpRecorder(String filename)
(in any case, the file will be gzipped and a .gz
extension will be added). You can also schedule a dump with dumpAfter(long millis)
/dumpAfter(long millis, String filename)
.
You can also manually dump a recording while the program is running using VisualVM. There's a flight-recorder bean with a dump
operation.
from pulsar.
Related Issues (20)
- watch! fails when called from within a receive with an :else clause
- Selective receive breaks when spawning an actor on a redefined `defsfn` HOT 4
- (spawn-fiber #(rcv channel)) failing in the REPL
- `Deref clojure.core/promise` in fiber outputs stream of warnings HOT 3
- supervisor does not appear to handle gen-server crashing HOT 9
- Automatic instrumentation HOT 6
- Pulsar fibers vs. core.async `go` blocks HOT 2
- Watching actors from a gen-server HOT 2
- shutdown! doesn't take cause/reason as an argument.
- Passing a symbol bound in let to gen-server throws an exception.
- call-timed! doesn't return nil HOT 1
- fvvvrv v vfvf
- auto instrumentation throwing ClassFormatError HOT 1
- clustered ping/pong in example not working
- Blocking and bound mailboxes - not working as expected HOT 2
- register! creates an mbean, need to remove with quasar HOT 1
- Mechanism for detecting when sending to a closed channel
- Status of pulsar HOT 3
- Clojure 1.10
- Support virtualThreads?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pulsar.