Skip to content

Instantly share code, notes, and snippets.

View apangin's full-sized avatar

Andrei Pangin apangin

View GitHub Profile
@apangin
apangin / unmalloc.c
Created January 11, 2021 17:45
Avoid long TTSP pauses caused by Unsafe.allocateMemory/freeMemory
// Replaces implementation of Unsafe.allocateMemory/freeMemory
// to avoid long time-to-safepoint pauses.
//
// Compile: gcc -O3 -fno-omit-frame-pointer -fPIC -shared -olibunmalloc.so unmalloc.c
//
// Usage: java -agentpath:/path/to/libunmalloc.so ...
#include <jvmti.h>
#include <stdint.h>
#include <stdio.h>
@apangin
apangin / ChangeVMFlag.java
Created December 11, 2020 01:26
Change MaxJavaStackTraceDepth JVM flag in runtime
import sun.jvm.hotspot.debugger.Address;
import sun.jvm.hotspot.runtime.VM;
import sun.jvm.hotspot.tools.Tool;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* Changes -XX:MaxJavaStackTraceDepth flag to 1000000 in runtime
* without restarting the JVM.
@apangin
apangin / proccount.c
Created October 8, 2020 21:41
Sets the number of CPUs available for a JVM in a container (JDK < 8u191)
/*
* Copyright 2020 Andrei Pangin
*
* Licensed 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
package string;
import org.openjdk.jmh.annotations.*;
import java.util.Random;
import java.util.concurrent.TimeUnit;
@BenchmarkMode(Mode.AverageTime)
@Fork(1)
@State(Scope.Thread)
@apangin
apangin / NpsConverter.java
Created June 6, 2020 18:08
Converts .collapsed output produced by async-profiler to VisualVM format
/*
* Copyright 2020 Andrei Pangin
*
* Licensed 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
/*
* Copyright 2018 Andrei Pangin
*
* This is a specialized Java port of the FlameGraph script available at
* https://github.com/brendangregg/FlameGraph/blob/master/flamegraph.pl
*
* Copyright 2016 Netflix, Inc.
* Copyright 2011 Joyent, Inc. All rights reserved.
* Copyright 2011 Brendan Gregg. All rights reserved.
*
// Compile:
// gcc -shared -fPIC -olibsighandle.so sighandle.c
//
// Run:
// java -agentpath:/path/to/libsighandle.so ...
// kill -37 <pid>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
package bench;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.State;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;
@apangin
apangin / patcher.cpp
Created July 2, 2019 16:03
Example for the presentation about JVM TI
#include <jvmti.h>
#include <stdio.h>
static jvmtiIterationControl JNICALL
heap_callback(jlong class_tag, jlong size, jlong* tag_ptr, void* user_data) {
*tag_ptr = 1;
return JVMTI_ITERATION_CONTINUE;
}
JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM* vm, char* options, void* reserved) {
@apangin
apangin / MapGenerator.java
Created October 23, 2018 11:19
GC off-heap overhead
package map;
import java.io.PrintStream;
import java.util.Base64;
import java.util.concurrent.ThreadLocalRandom;
public class MapGenerator {
public static void main(String[] args) throws Exception {
try (PrintStream out = new PrintStream("in.txt")) {