{"id":13452679,"url":"https://github.com/aragozin/jvm-tools","last_synced_at":"2025-05-12T13:23:03.313Z","repository":{"id":3137578,"uuid":"4166277","full_name":"aragozin/jvm-tools","owner":"aragozin","description":"Small set of tools for JVM troublshooting, monitoring and profiling.","archived":false,"fork":false,"pushed_at":"2024-01-26T12:20:14.000Z","size":5659,"stargazers_count":3330,"open_issues_count":15,"forks_count":523,"subscribers_count":199,"default_branch":"master","last_synced_at":"2025-04-23T16:04:31.254Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aragozin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-04-28T09:28:32.000Z","updated_at":"2025-04-15T04:01:24.000Z","dependencies_parsed_at":"2023-07-05T18:01:49.643Z","dependency_job_id":"677975f9-d137-41df-83bb-0747560706b8","html_url":"https://github.com/aragozin/jvm-tools","commit_stats":{"total_commits":405,"total_committers":28,"mean_commits":"14.464285714285714","dds":0.09382716049382711,"last_synced_commit":"7b8b9c4e3a6ad137a7f94be399a82c98d97e5403"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aragozin%2Fjvm-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aragozin%2Fjvm-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aragozin%2Fjvm-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aragozin%2Fjvm-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aragozin","download_url":"https://codeload.github.com/aragozin/jvm-tools/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253745363,"owners_count":21957357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T08:00:20.201Z","updated_at":"2025-05-12T13:23:03.289Z","avatar_url":"https://github.com/aragozin.png","language":"Java","funding_links":[],"categories":["Java","Profilers"],"sub_categories":[],"readme":"Swiss Java Knife (SJK)\n=========\n\nSJK is a command line tool for JVM diagnostic, troubleshooting and profiling.\n\nSJK exploits standard diagnostic interfaces of JVM (such as JMX, JVM attach and perf counters) and adds some more logic on top \nuseful for common troubleshooting cases. SJK can also be used as a library for building application specific diagnostic tools\nor to enhance your code with self monitoring features.\n\nWhat you can do with SJK?\n----\n\n - [Monitor Java threads in real time][ttop]\n - [Analyze head dynamics with advanced class histograms][hh]\n - [Access MBean attributes and operation from command line][mx]\n - Create [flame graphs][html-flame] and over reports from snapshots created VisualVM, Java Flight Recorder or [SJK's own sampler][stcap]\n \nSee [full command reference](sjk-core/COMMANDS.md).\n\nDownload\n----\n\nLatest prebuild binaries [![Last Version](https://img.shields.io/maven-central/v/org.gridkit.jvmtool/sjk.svg)](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.gridkit.jvmtool%22)\n- `wget https://training.ragozin.info/sjk.jar` -\u003e [sjk.jar](https://search.maven.org/remotecontent?filepath=org/gridkit/jvmtool/sjk-plus/0.22/sjk-plus-0.22.jar) \n\nStarting sjk\n----\n\n    java -jar sjk.jar \u003ccmd\u003e \u003carguments\u003e\n    java -jar sjk.jar --commands\n    java -jar sjk.jar --help \u003ccmd\u003e\n\nBelow a few command from SJK ([full command reference](sjk-core/COMMANDS.md)).\n\n[ttop]\n----\n\nPools thread CPU usage of the target JVM and periodically reports to the console.\n\n - can attach via PID or open JMX port\n - displays thread memory allocation rate and cumulative process allocation rate\n - displays safe point time consumption (only if attache via PID)\n\n[More details][ttop]\n\n[hh]\n----\n\nSimilar to `jmap -histo`.\n\n - plus can show a histogram of dead objects (histograms of all and live requested, then difference is calculated)\n - plus can show N top buckets in histogram\n\n[More details][hh]\n\n[stcap], [stcpy], [ssa] and [flame]\n----\n\nThese commands provide basic sample profiler capabilities. `stcap` produces hyper-dense stack trace dump \n(about 1000 compression rate compared to text format) and `ssa` provides few reports over dump files.\n`stcpy` can copy data in archives produced by `stcap` (e.g. merging dumps or filtering selected threads).\n\nSo far following reports are available:\n\n - [sophisticated filtering] (time, stack trace, thread name)\n - stack frame histogram with advanced filtering options\n - flame graph visualization (SVG or [interactive HTML][html-flame])\n - per thread summary (CPU usage, memory allocation, etc)\n - converting back to text format\n\nDump file can be also processed programatically.\n\n[More details][ssa]\n\n[mx]\n-----\n\nThis command allows you to do basic operations with MBean from command line.\n\nIt can:\n\n - read MBean attributes\n - update MBean writeable attributes\n - invoke MBean operations (arguments are supported)\n - display composite and tabular data in a human readable format\n - use wild cards to shorten MBean names (e.g. `*:*,name=CodeCacheManager` instead of `java.lang:type=MemoryManager,name=CodeCacheManager`)\n - connect to local JVM processes by PID (e.i. any Java process, you do not need to enable JMX server)\n - connect to JMX using host:port (password authentication is supported)\n\n[More details][mx]\n\n[jps]\n----\n\nSimilar to `jps` from JDK. \n\n- plus can display specific system properties of process in output\n- plus can display values of specific -XX for HotSpot JVM processes \n- plus can filter process java processes by their system properties\n \n[More details][jps]\n\n[gc]\n-----\n\nReport information about GC in real time. Data is retrieved via JMX.\n\n[More details][gc]\n\nmxdump\n-----\n\nDumps all MBeans of target java process to JSON.\n\n [ttop]: sjk-core/docs/TTOP.md\n [jps]: sjk-core/docs/JPS.md\n [hh]: sjk-core/docs/HH.md\n [gc]: sjk-core/docs/GC.md\n [mx]: sjk-core/docs/MX.md\n [stcap]: sjk-core/docs/STCAP.md\n [stcpy]: sjk-core/docs/STCPY.md\n [ssa]: sjk-core/docs/SSA.md\n [flame]: sjk-hflame/docs/FLAME.md\n [sophisticated filtering]: sjk-core/src/main/resources/org/gridkit/jvmtool/cmd/ssa-help.md\n [flame graphs]: http://blog.ragozin.info/2016/01/flame-graphs-vs-cold-numbers.html\n [html-flame]: sjk-hflame/docs/flame_graph_ui.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faragozin%2Fjvm-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faragozin%2Fjvm-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faragozin%2Fjvm-tools/lists"}