JVM Geheugen metrics monitoren

De JVM bevat meerdere geheugen onderdelen die met bijvoorbeeld micrometer op te halen zijn.

Heap geheugen old generation:

heap_old_gen: Tenured Space: The objects which reach to max tenured threshold during the minor GC or young GC, will be moved to “Tenured Space” or “Old Generation Space“.

Heap geheugen young generation:

heap_survivor_space : This contains the objects that have survived from the Young garbage collection or Minor garbage collection. We have two equally divided survivor spaces called S0 and S1.

max_heap_eden_space: When we create an object, the memory will be allocated from the Eden Space.

Non-heap geheugen:

nonheap_metaspaces : Hierin staat de class metadata als compressed class space disabled is (die staat voor 64bit machines standaard aan, en is aan te passen met UseCompressedClassPointers).

nonheap_compressed_class_space: Hierin staan de classes metadata als de compressed class space enabled is (default staat hij aan), de size is aan te passen met -XX:CompressedClassSpaceSize.

nonheap_non_nmethods: A non-method code heap containing non-method code, such as compiler buffers and bytecode interpreter. This code type will stay in the code cache forever. Default 5MB, pas aan met -XX:NonNMethodCodeHeapSize.

nonheap_profiled_nmethods: A profiled code heap containing lightly optimized, profiled methods with a short lifetime. Default 122MB, pas aan met -XX:ProfiledCodeHeapSize.

nonheap_non_profiled_nmethods: A non-profiled code heap containing fully optimized, non-profiled methods with a potentially long lifetime. Default 122MB, pas aan met -XX:NonProfiledCodeHeapSize.

Elk deel geheugen heeft een used, comitted en max size. 
De used size is het huidige gebruik. De max size is de max size, maar die waarde is niet gegarandeerd beschikbaar. De committed size is de size die gegarandeerd voor de jvm beschikbaar is.

Links

https://dzone.com/articles/understanding-the-java-memory-model-and-the-garbag
https://www.baeldung.com/java-heap-used-committed-max
https://www.baeldung.com/jvm-code-cache
https://stackoverflow.com/questions/59189225/in-java-memory-pool-what-is-the-replacement-of-code-cache-replacement-in-java-11

Eigen bitcoin node draaien met Lightning wallet

Een eigen Bitcoin full node draaien kan tegenwoordig heel makkelijk met Umbrel, een Raspberry Pi 4 en een 1TB SSD.

Ik heb hem zelf opgezet met een HDD ipv een SSD en je merkt dat het dan wel een stuk langzamer is. Initieel moet de gehele blockchain opgehaald worden en elk blok moet worden geverifieerd. Met een SSD duurt dat een paar dagen en met een HDD kan dat 2 weken of langer duren.

Met Umbrel is het maken van een eigen Bitcoin node erg gemakkelijk, de stappen die je moet uitvoeren staat op deze pagina beschreven: https://getumbrel.com/#build

Lees meer »

Periodiek bitcoins kopen

Als je elke maand automatisch wat geld in bitcoin wilt investeren, dan kan dat nog een lastige opgave zijn en op dit moment zijn daar nog geen kant en klare oplossingen voor.
Met Bitvavo en wat scripting kun je dat echter toch redelijk makkelijk voor elkaar krijgen met onderstaande stappenplan:

  • Open een account bij Bitvavo (https://bitvavo.com/nl) en koppel je gewone bankrekening met Bitvavo.
  • Gebruik een periodieke bankoverschrijving om elke maand geld te storten van je gewone bankrekening naar je Bitvavo rekening (dat kun je doen door telkens de opgegeven omschrijving te gebruiken, zie hier).
  • Maak een API key aan op Bitvavo zodat je via een API je rekening kunt benaderen.
  • Draai elke dag een script die met behulp van de API key kijkt of er nieuw geld is gestort op je Bitvavo euro-rekening, en stuur die naar je Bitvavo bitcoin-rekening.

Op die manier bouw je vanzelf bitcoins op bij Bitvavo. De wallet is echter wel in beheer bij Bitvavo, maar je kunt wel gewoon meeliften op de bitcoin koers.

Voor het script en installatie, zie: https://github.com/robbertvdzon/bitvavo-autobuy

Contract testing met Pactflow (deel 3/3) : Provider test

Zie ook:
Contract testing met Pactflow (deel 1/3) : Contract test process
Contract testing met Pactflow (deel 2/3) : Consumer test
Contract testing met Pactflow (deel 3/3) : Provider test

In deze blog laat ik een voorbeeld zien hoe je als provider microservice een contract test kunt maken. Hierbij ga ik er vanuit dat je Jenkins gebruikt en een account hebt bij pactflow die je gebruikt als pact-broker. De code is in Kotlin.

Lees meer »

Contract testing met Pactflow (deel 2/3) : Consumer test

Zie ook:
Contract testing met Pactflow (deel 1/3) : Contract test process
Contract testing met Pactflow (deel 2/3) : Consumer test
Contract testing met Pactflow (deel 3/3) : Provider test

In deze blog laat ik een voorbeeld zien hoe je als consumer microservice een contract test kunt maken. Hierbij ga ik er vanuit dat je Jenkins gebruikt en een account hebt bij pactflow die je gebruikt als pact-broker. De code is in Kotlin.

Lees meer »

Overleef de corona lockdown met een toeptoernooi met vrienden

Tijdens de corona lockdan van begin 2020 wilde ik een online toeptoernooi spelen met vrienden.

Het idee was dat we meerdere virtuele toeptafels zouden hebben met 4 spelers per tafel. Iedereen speelt dus een toepspel met 4 personen.

Als alle tafels klaar zijn, dan worden alle spelers automatisch opnieuw verdeeld over de tafels en begint elke tafel opnieuw.

Aangezien er geen bestaande online-toep applicatie bestond had ik besloten die zelf te gaan bouwen en ben daar 1,5 week mee bezig geweest.

Daarna heb ik de code nog wat gerefactored en heb deze op github gepubliceerd.

Er zitten nog verbeterpunten in, maar de liefhebber kan de code bekijken op https://github.com/robbertvdzon/toepen