Il faut sauver le dernier giga de RAM

Damien Lucas

Tech Lead

Architecte

onepoint

dlucasd

dlucasd_

dlucas

Ivan Béthus

Tech Lead

onepoint

ibethus

ibethus
sauver giga ram
chaine simple
chaine complexe
plan2

"Vous avez 3 semaines !"

run

Semaine 1

semaine1
Générer un dump mémoire
jmap -dump:[live],format=b,file=<file-path> <pid>

jcmd <pid> GC.heap_dump <file-path>

java -XX:+HeapDumpOnOutOfMemoryError #optionnel : -Xmx1g

Eclipse Memory Analyser

Lancer JFR
java -XX:StartFlightRecording=duration=200s

JDK Mission Control

Semaine 2

semaine2
terminal
pg_stat_statements
- Ajout dans le fichier postgresql.conf :
shared_preload_libraries = 'pg_stat_statements'
- Redémarrage de PostgreSQL
create extension pg_stat_statements;
select pg_stat_statements_reset();
Projections fermées
interface CourrierReporting {
	String getVille();
	String getDestinataire();
}
Projections ouvertes
interface CourrierReporting {
	String getVille();
	String getDestinataire();

	default String getFullDestinataire() {
		return getDestinataire().concat(" ").concat(getVille());
	}
}
Récupérer une liste de courriers
public interface CourrierRepository extends JpaRepository<Courrier, Long> {
	Stream<Courrier> getByVille(String ville);
	Page<Courrier> getByVille(String ville, Pageable p);
	Slice<Courrier> getByVille(String ville, Pageable p);
}
hypersistence-utils
<dependency>
    <groupId>io.hypersistence</groupId>
    <artifactId>hypersistence-utils-hibernate-63</artifactId>
    <version>3.7.3</version>
</dependency>

Semaine 3

semaine3

Les listes, c’est bien…​

leonardo
tom

…​les stream, c’est mieux ! (enfin, parfois)

Ajouter un cache
@EnableCaching
public class MaClasseDeConfiguration {
}

@Repository
public interface MonRepository extends JpaRepository<MonEntite, Long> {

	@Cacheable("leNomDeMonCache")
	List<MonEntite> findByParam(String param);

}

Livraison

livraison

To be continued…​

forrest end