From 0c58a81e53cbfa2f41e11d8bf850387e8e9d18b3 Mon Sep 17 00:00:00 2001 From: r1viollet Date: Tue, 11 Mar 2025 09:47:45 +0100 Subject: [PATCH 1/4] ddprof fix the inlining test --- scenarios/ddprof_inline/Dockerfile | 2 +- scenarios/ddprof_inline/expected_profile.json | 5 +++++ scenarios/ddprof_inline/inline.cc | 6 +++++- scenarios/ddprof_inline/inline_test | Bin 0 -> 53344 bytes 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100755 scenarios/ddprof_inline/inline_test diff --git a/scenarios/ddprof_inline/Dockerfile b/scenarios/ddprof_inline/Dockerfile index 3d31307..5d130e2 100644 --- a/scenarios/ddprof_inline/Dockerfile +++ b/scenarios/ddprof_inline/Dockerfile @@ -5,4 +5,4 @@ ADD ./scenarios/ddprof_inline/inline.cc . ADD ./scenarios/ddprof_inline/build.sh . RUN ./build.sh -CMD /app/run_ddprof.sh -l notice --show_config ./inline_test +CMD /app/run_ddprof.sh -l notice --inlined_functions true --show_config ./inline_test diff --git a/scenarios/ddprof_inline/expected_profile.json b/scenarios/ddprof_inline/expected_profile.json index 422355d..ec941e8 100644 --- a/scenarios/ddprof_inline/expected_profile.json +++ b/scenarios/ddprof_inline/expected_profile.json @@ -8,6 +8,11 @@ "regular_expression": ";_start;__libc_start_main;main;intensiveTask.*", "percent": 33, "error_margin": 3 + }, + { + "regular_expression": ";_start;__libc_start_main;main;foo;moreIntensiveTask.*", + "percent": 66, + "error_margin": 3 } ] } diff --git a/scenarios/ddprof_inline/inline.cc b/scenarios/ddprof_inline/inline.cc index 89da297..fcc7cd9 100644 --- a/scenarios/ddprof_inline/inline.cc +++ b/scenarios/ddprof_inline/inline.cc @@ -20,6 +20,10 @@ inline void moreIntensiveTask(std::chrono::steady_clock::time_point endTime) { } } +inline void foo(std::chrono::steady_clock::time_point endTime) { + moreIntensiveTask(endTime); +} + int main() { const char* envVar = std::getenv("EXECUTION_TIME_SEC"); if (!envVar) { @@ -34,7 +38,7 @@ int main() { intensiveTask(intensiveEndTime); auto moreIntensiveEndTime = totalStartTime + std::chrono::milliseconds(1000); // full second - moreIntensiveTask(moreIntensiveEndTime); + foo(moreIntensiveEndTime); } return 0; } diff --git a/scenarios/ddprof_inline/inline_test b/scenarios/ddprof_inline/inline_test new file mode 100755 index 0000000000000000000000000000000000000000..901084f8b7ae114057d30162d141e091b698f798 GIT binary patch literal 53344 zcmeIb33yz^u{PZ2%pA=~M;gi2V#(_WWLw6TWG&toyvdfpHpY^{81NvCM%I9&5t@+~ z7PFWDjxkHv!GJ?T76Q41OCUflfe;{&g!M}x`LZY6n1n5GLm(vhd*AAFX0wg$B;WHt z|NndR%<1l`>gw+5>gwucjxK0kzSJ}f<$gSBzGCX};Tp2QLF|6oi6B^@W~u@_C#nf5 z2WhXsG=6~&fYqPZ%*@d5z&!|=ubh$ngrhZBxuIJ_hRk=MPf?!6xS=Z2Y38#Sb<){k zuEW#~U3{{t-#)v9@!;p2{6_Bic#^AXH^Jx;zJC!ZTC zC!ZU-@?`b-o$2t)4yOXgj~iy^>v8gBhf8!e<%TSSpSIT%UH?pZtDJnxgTh8-hi*A; z=$3aP@=-2_`fg6Xc1~}q>+P!PjrI?1uGu_udd>8v+IXzC zL8`!d1@Wa$EnB&U-SIeKZg-j&>a@#`xDp3X`t!oe$~LYGpZn%(@4vR=;va8Y|EvG{ z7HL>-<{=F~4? zj`VtbhpCY&xIiO|SRg;4(1yNPe<+^l7)*phD%9G(BGeTbjBJR;6OqC86^nag{gL*L z&fbW|?H{vlWm{rqG!_qacElr1t^Lu&lKSS2DzvUG(G-ph4oa+kdMK3W8H{ZLRaYq7 z5l@f;Ij4sK?TG;~Up~l*#+WJ|U$@+|B1`=Iu;?IkbZNbue5ckQ`z_>S%B7`=;RM$W^ zsHao$ec+lKFx4@Fhoo4B#$ya3ELF4{rn;pSs_Hbx1l#J>jIcUoZ)H zOTFl%6O%rNDZx~~M4BIWzH;Y@-NhQd)|ro7_|=Z`pOFPW!=d*t(D__?H~r$V8crL= zHoBkJ(%`NwCGOX0@O+mT;hr>jK^pwsGGQMFLs{v*taKzReR@`UO;&nEdU|1d%g%Y50!poELst~-xd{zn zM{H@?{>&qswCg|E^8jEAw}0<5k8fRD|JI%xNU{CNmYv^PQ1jE`J%2z4v|RM0dhV7v zf13Erk}7eK>K`v0w?J+G?vCYE`Gx=S;P8>ptcL~Y^lb!P_$ZMxHoWZOQ6QyX;Pe4S8 z=kEP=;kXM)_oNeo{tY5`PWvr`NuRWAf4Aj{w~uXk;zLi1@pQ{epCn4a;4X)OfA6om zr5$d5j*koHJ%zH=(Bw5O+vcqUC7SYjBEMzFyi1YT)B2CSd-rsqu1{OHfzCJ`d6VTc z{~Mctbn3%&TgMNzIoPITecnpB_fr@xCPN`H51;tO7pUgqc~FB$vE(GK8|&k+e6 zk-!lN9Ff2g2^^8Y5eXcTz!3=?k--0FCBSor=C#d>*R;2uurk!%x}rJM*1TBl2NuL3 zNfgIJeUbh|aAU_{lxI=FXgt^-O9bPQM6EJLdFCvDq_|xFU+?VQn?QKUyLdGFpg5iWUe@7^F*g$abGA>H-<-n~CW$TL!YjB{2iV{?%)D&Ob78gzv7E2Zn_9p*@>e!L9k7=wrieTnvIll&7`gsH434C7z zd^bY(!?Lcx_iB{aN?>!KXq&k#5Ii?fv@qb8Gnsn;UVwJlT-`1W6kTDq1j;YP7QCL<)zOU-rQcI0zJ0!JipL;^=7a6|$} zBydCmMY2NYTCtnB2%TNVQ`tMHu3McK} z%NpgR-L=d}C+*(D;`)UjcWv>PPxi)`zK>_I__%kFE_WjC-J{nWyn9#Zk52vEJ3?H; z@KdUTskDN4*rvGnzlJ~c>m``;&aDfx9a>6s5aKH&K zbi%8haJLiQ=Y)?tVHW#CPWl&U(q)Sm&kk0v=^W}$3$f&E)J|=h z27Yxt zKvTYg9E_+bs|t0@JLO>vnq2_-r%b?}0b{sV?e+B|Z-?J|*?6V$N=7hKjo%I!Jji_y ziB7LQ%=0QD3nI{^;l(6aFdlU;&Ldh`FO5;kF7ySc$<}x9uuH6m5O`IS2^hcASWS;A zGIAcrK(h%7d#z}HLZKjRj_~0<4F%ezp1YZKJ>vN}rQ-m%Clh%tHbM%liWbBxzKp^9 zTA<$l0(!@K8I1}wI;DSvrUa(v9t+|5t=~e|12ZI1WZhGS#7s$)TgPKG2WCkkXw^ebl`uhpr6sBkKYp;@04UHRwH~lKShrS5B&>S2=Q#Uz6t~&h#XKv9 z|8F$(LhH-u_Q1-*>DV5+*gB1cp5V8@ZJTvD+jC-JDH4}k)5zeIg1f=sYU>InP8~50 zn42u#wFsP6F$sy?)3a^q++4Iif?LLFSeaq_AwIKcf%KnQw9~#F49%je9Qf7t zIKf|I&ynzRcAtdT+S?_(&c0j1>+Po{yutpRgg4q=)Xyxs$sQ%)&33hfx7aHsywy%f zxXZp;!rSaeCA{5!Rl?o&+Y;Vs7ourq(HHEg5`NKMF5#E#K?%QV-zecd_J2wEb^Esx z-e-Rz;r;elXqj2`pY{?7AFx9be$zfj!Uyf^C49)fPr`56KalWY`zG|GS@ekgbqOD} zpO^64_S+KvmmLTa|Cl{X!tdDa5>DNgq5Y7AKeAtt@Ok@BPM8PdU>3b#PjbQ*3174~IN_xdzGUC! zgx{0!W&3wd=sQ}eGTSJ-8!B3sZRjs`io6TaI}pOb*U9@w zke`a)j8R&AYtdcDpt=AUp8)Sg<+Wta{4C5)@qNClfl3fvkwhsw3{jcI?M2hsR-|$wU_X9E~eY7{337kwjtTpd*Z%nOPolS@VJ?k-2oc;j5ga6d{!^kt#S9 z`citW;hPIS%(2u(86?y-D7YUjFa5mX+l0bz2hmw1VkEtgds)c6hL3(MaaZq;NW}86 z;rkGViA3K_5=n6shAOzb8l0Xod>ycwguF69M?kBa zL3zrcd+aY|metumo5*mg{ofMS+wV!(V1FWElYL7y@zd-tNjTlUU&0yoV-n7?XG=KS zUMk@nd$ojf?e!AQw}+#j%(7$cze#$bohRWUyG+8x_E8cpv1=t z{|aOD%RvCkFR)7>c(eRMdzpln+V@Df-F{BOE9}=L+-ZL-;g$Aim`=0&D!Wm_YwXh{ zyv{yH!W-;sB)r+aSHfHDXC=JV=3POv{5Cre7x~Qc-S%V&zhECL;a&D}3BP2om+;H> zRtdji-!9=-?Z+hin*C!5@3H?P;k#w$NWK12wsSoBeo$5f`)HPbST;q%kIJ@5__wmf z5`J73mhkUow==BhwCM_(6=8cmjFwpuvD+o=w!0x9JEiBFkzo3;gEfsgd6S0B;0KOSi&v#n-XrdKa_Brod@ML zD=x8v5`M;>BjIKC3JEW_yCmFUe^$bs_6-tVW#5BvNdz`%SgoqvsabGb`@Y& z^K!V2yxD(wzEZUzKveA{m;|G?8&9+L6tuwGd^O|>m}(w^YlyYs1p^-zVa~*7v#R?d zgj|P=XWy6$nvsL1ZHz{8DU%z`2T}F^1n-CO&G|m+p_bkN#3plb05c$fueu05Aq+Cx z$a74e2Spji+rWP0QW!5Yf1LBu$aBqtzZN1lAcj$d@`SmjQ1&&*vg{@d*^#@AkqePf z=BU;79uS+O+U%c8*sfj3QK#7-NjhSez|NSXdh9w0qjodGx~Cuqg}P3B3sj?Dwl<(% zX8>_I%Dj^0dYV9xzz_4(=iFD&ip?s<6q<9rH~+_AGZugu^v<*;RD8y@T3Ooo`k)|W|qmgj!V9ptwW--|Ly zQg+iO7w;pO=*R4=WQ#Vw2ea#&Km08OR|B^x2qF58t6;a7W9QmGJBHyr`|}dcw?CjS zJ9dFR1j(6W7upv|xX9im;bQwC376O}OW17hk#MQ)X(atJyF$Vf?E8h^D!UHpQQeS~ zF)q)@?}47o?jPz?!;BjM8#_s<m;v&SHB-riU!a){tQT#F@n|f*ZnAD zX~DyoaYoHU0e%W`4?hLg+Od$5SHO9jCJ;vgOLHL zyG=y?E9jF7v$9yz%>ig3>AP4`{zZ98jWd1Fh6D;(3&i>qatDw{o7Lz*B8PxDH-(%B zQ!>%~0>s2>d=7}4h?Mr_6IpAH1d=)b1Bgdlq#-_Eeh-RlFwuvS{Uu;ubt#k}XPH+4 z%j|Ch@sW#kvi}C1FwZPUSF-dX2xJt#X+p^VWi9NTIm4?d8i1XbMX>_|<9KrpI*B~m zfej@o`b9eNdZkvIBk?4~Mqn?>q&VT%=%Qk1H0wF04?mYRMJn{xv)~zKZW8jW~hR%186pSeJf%02>LpiCx^+44mZzFoQU!FX~@QhD(FTr<{v%2 zD=<576wyQ2Pu6{GpynZ?qM+CUk4sJ8`B1BeP}}JkwVo?nt9b`XrNK*@#iSjTsZlrC zJ4CCqx1a{u3w{T=!CUol*pk;~@^fW!Afc_Qh6ysg9^c1#S_lWL0qdk|AQQZ*n2F{a z!~dH9B8r<7YS;6%8WpV}_(OmGUjRRk?uI&%*s1Ifd7!KF;UgO61^MGpfA5RXBJ<(` z_MoO@Y^qo)HR^82#Tb5rKc5;if~3Q5^cU;i23MgP)s5*ye54&9a(tvHdWJsI`Sg*- zm0&Le4JBZY$4EIzTU{p!ujIL)0YaVgky&ylxGdoYySXjDM9tX6Ey(Ew6>nmqG|Y~C zYM8EcuT&b^)~+Z8PqOdasZWifjgqQOgb_SWyKn#S>6$E9RH$Za7w#L78Y_4F`;ZbP zMO?L8IYZUWL+zgji_!1H6$?(XzK)@|1nCp-&H1Pig;ZjmQWL+0w6)#WhS`mP4M_Hp zQSOoWhFi5ls9j) zm4RL;V&w{J5r!5Q5xLOlB(2Bw{0&)O{1(%kK?1BIV7!m&EIl3#z0mj#YIyV<&t3$9 zAE3ono%IVy_#0?NGueF^&8NF=$O56@21wcaUDNs@>@fKb9=J$V@Sm_y-g``|7d%MJ zUOPbjRKefjVR^%*)deLW@%Kr*ZyQwL15{z;S3Q5LgmVhJ@(0ivjL1W++KhRwbc|tr zrQR8C?sknq5nx%-fecm08piEN@DM;x5WX(>_Eme#LV~9g%!kUI3&HsA18)4uhH)A| z{7OXfIaD107J02E)Z1phM!M#F+C5@;KQwEbNmjl*k!?spUG71Ujk%tyZ7OAfV*1KxFAuZWK zDn3;1406bUh{k_am-AqfgT&GbBS+s=l;&S`{dkU&F3mHb4pslqIG(KtPUVdq4({)Z zn0V5nt0#ONS)Il<-(=>uA*8H$4x@WQ6Zl$S9IHw^q7Xcs5rxqL^ZD2di*+yb5hofW z{m7)sJp+$|KVV!|J!9to5+RG=kxn+HZwxCsOta!yL{?1=;a9K~hPUc@Gk*vnS@AR| zRa;Hudlhzb{5;Ky#~GSHGk7!?41Qqd-;ak##*3aY8^6B~~evdxAcBF1H3?O(zryX0&w| zI%2{wNd&DR%;|)Z{FlMB+T!n}CzKXatEVd2$H@CGdaCMI(iWb{Njp{EZ`dEd5P9%~ zE+rTlmnv^OYG2hSGUdr#N;(dHEr!MTJ0)8HC1>aN-46pk{z={6O(c;1mYB#X9$M-o#;jv1ofh3MGl}khEJDCI*7=f99T$4$Vx1PA44I|w* zh!V>x%!Pq(8r9}rV;CjJuP#`Mp$6mPfpsT3$0p9lDWmFseL}Z)Kg4;H*ow=f6+EI$ zD~;_{zDrnIvmQJ=yOiOsd}AnQkG5bu%1pK15j5xP@e_p|k2tgW=A8-#y?Xok3UA&>jk$0u=S^-*Q>5K^V<YgzS zn48D7Iyc+opzj_*G;{M5H@$2x)UxWOF$|cShr8)z3;Kl-44C_O$=oDX0h2c9Z(|q` zz@y+)*}A_p&4(jMLl%=s!-$?!MCKP8KgF0FHr23s7;F}OEMb|~u;ozLGHf0S�aX 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 Date: Tue, 18 Mar 2025 11:44:38 +0100 Subject: [PATCH 2/4] java - add a basic tests that burns CPU --- scenarios/java_basic/CpuBurner.java | 31 ++++++++++++++++++++++ scenarios/java_basic/Dockerfile | 24 +++++++++++++++++ scenarios/java_basic/expected_profile.json | 5 ++++ 3 files changed, 60 insertions(+) create mode 100644 scenarios/java_basic/CpuBurner.java create mode 100644 scenarios/java_basic/Dockerfile create mode 100644 scenarios/java_basic/expected_profile.json diff --git a/scenarios/java_basic/CpuBurner.java b/scenarios/java_basic/CpuBurner.java new file mode 100644 index 0000000..0d5883c --- /dev/null +++ b/scenarios/java_basic/CpuBurner.java @@ -0,0 +1,31 @@ +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.TimeUnit; + +public class CpuBurner { + public static void main(String[] args) { + int numThreads = Runtime.getRuntime().availableProcessors(); + ExecutorService executor = Executors.newFixedThreadPool(numThreads); + + int executionTimeSec = Integer.parseInt(System.getenv().getOrDefault("EXECUTION_TIME_SEC", "60")); + + System.out.println("Starting CPU intensive tasks on " + numThreads + " threads for " + executionTimeSec + " seconds..."); + + for (int i = 0; i < numThreads; i++) { + executor.submit(() -> { + while (!Thread.currentThread().isInterrupted()) { + double value = Math.pow(Math.random(), Math.random()); + } + }); + } + + try { + Thread.sleep(executionTimeSec * 1000L); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + executor.shutdownNow(); + System.out.println("CPU intensive tasks stopped."); + } +} diff --git a/scenarios/java_basic/Dockerfile b/scenarios/java_basic/Dockerfile new file mode 100644 index 0000000..a0da490 --- /dev/null +++ b/scenarios/java_basic/Dockerfile @@ -0,0 +1,24 @@ +# Use OpenJDK 18 as base image +FROM openjdk:18-jdk + +# Set environment variables for Datadog +ENV DD_SERVICE=cpu-burner-app +ENV DD_ENV=production +ENV DD_PROFILING_ENABLED=true +ENV DD_LOGS_INJECTION=true +ENV DD_TRACE_DEBUG=true +ENV DD_PROFILING_LOG_LEVEL=debug +ENV KEEP_JFRS=true + +# Install Datadog Java agent +RUN curl -LO https://dtdg.co/latest-java-tracer && mv latest-java-tracer dd-java-agent.jar + +# Copy Java application to the container +WORKDIR /app +COPY ./scenarios/java_basic/CpuBurner.java . + +# Compile Java application +RUN javac CpuBurner.java + +# Run the application with Datadog profiler +CMD ["java", "-javaagent:/dd-java-agent.jar", "CpuBurner"] diff --git a/scenarios/java_basic/expected_profile.json b/scenarios/java_basic/expected_profile.json new file mode 100644 index 0000000..9608c96 --- /dev/null +++ b/scenarios/java_basic/expected_profile.json @@ -0,0 +1,5 @@ +{ + "test_name": "java_basic", + "scale_by_duration": true, + "stacks": [] +} From 8163f923f6fedc2f9b7dd212b4d484b2c4360daa Mon Sep 17 00:00:00 2001 From: r1viollet Date: Tue, 18 Mar 2025 14:38:57 +0100 Subject: [PATCH 3/4] java - add a dockerfile for OpenJDK 11 --- correctness_test.go | 5 +++ scenarios/java_11.0.20/CpuBurner.java | 31 +++++++++++++++ scenarios/java_11.0.20/Dockerfile | 40 ++++++++++++++++++++ scenarios/java_11.0.20/expected_profile.json | 5 +++ scenarios/java_basic/CpuBurner.java | 3 +- 5 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 scenarios/java_11.0.20/CpuBurner.java create mode 100644 scenarios/java_11.0.20/Dockerfile create mode 100644 scenarios/java_11.0.20/expected_profile.json diff --git a/correctness_test.go b/correctness_test.go index f99990b..e80f9b9 100644 --- a/correctness_test.go +++ b/correctness_test.go @@ -142,6 +142,11 @@ func runTestApp(t *testing.T, dockerTag string, folder string) string { } args = append(args, "-e", "DD_SERVICE=prof-correctness-"+strings.Split(folder, "/")[1]) args = append(args, "test-app:latest") + // default socket path for Datadog + // socketPath := "/var/run/containerd/containerd.sock" + // if _, err := os.Stat(socketPath); err == nil { + // args = append(args, "-v", socketPath+":"+socketPath) + // } t.Log("Docker run command: docker ", strings.Join(args, " ")) cmd := exec.Command("docker", args...) out, err := cmd.CombinedOutput() diff --git a/scenarios/java_11.0.20/CpuBurner.java b/scenarios/java_11.0.20/CpuBurner.java new file mode 100644 index 0000000..d865219 --- /dev/null +++ b/scenarios/java_11.0.20/CpuBurner.java @@ -0,0 +1,31 @@ +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.TimeUnit; + +public class CpuBurner { + public static void main(String[] args) { + int numThreads = 2; + ExecutorService executor = Executors.newFixedThreadPool(numThreads); + + int executionTimeSec = Integer.parseInt(System.getenv().getOrDefault("EXECUTION_TIME_SEC", "60")); + + System.out.println("Starting CPU intensive tasks on " + numThreads + " threads for " + executionTimeSec + " seconds..."); + + for (int i = 0; i < numThreads; i++) { + executor.submit(() -> { + while (!Thread.currentThread().isInterrupted()) { + double value = Math.pow(Math.random(), Math.random()); + } + }); + } + + try { + Thread.sleep(executionTimeSec * 1000L); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + executor.shutdownNow(); + System.out.println("CPU intensive tasks stopped."); + } +} diff --git a/scenarios/java_11.0.20/Dockerfile b/scenarios/java_11.0.20/Dockerfile new file mode 100644 index 0000000..5634be6 --- /dev/null +++ b/scenarios/java_11.0.20/Dockerfile @@ -0,0 +1,40 @@ +# Use Rocky Linux 9.3 as base image +FROM rockylinux:9.3 + +# Install Temurin JDK 11.0.20.1+1 +RUN dnf install -y \ + glibc-langpack-en \ + && dnf clean all \ + && curl -LO https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.20.1%2B1/OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz \ + && tar -xzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz -C /opt/ \ + && rm OpenJDK11U-jdk_x64_linux_hotspot_11.0.20.1_1.tar.gz + +# Set JAVA_HOME environment variable +ENV JAVA_HOME=/opt/jdk-11.0.20.1+1 +ENV PATH="${JAVA_HOME}/bin:${PATH}" + +# Set environment variables for Datadog +ENV DD_SERVICE=cpu-burner-app +ENV DD_ENV=production +ENV DD_PROFILING_ENABLED=true +ENV DD_LOGS_INJECTION=true +ENV DD_TRACE_DEBUG=true +ENV DD_PROFILING_LOG_LEVEL=debug +ENV KEEP_JFRS=true + +# Install Datadog Java agent +RUN curl -LO https://dtdg.co/latest-java-tracer && mv latest-java-tracer dd-java-agent.jar + +# Set working directory +WORKDIR /app + +# Copy Java application to the container +COPY ./scenarios/java_basic/CpuBurner.java . + +# Compile Java application +RUN javac CpuBurner.java + + +ENV DD_PROFILING_DDPROF_ENABLED=true +# Run the application with Datadog profiler +CMD ["java", "-javaagent:/dd-java-agent.jar", "CpuBurner"] diff --git a/scenarios/java_11.0.20/expected_profile.json b/scenarios/java_11.0.20/expected_profile.json new file mode 100644 index 0000000..9608c96 --- /dev/null +++ b/scenarios/java_11.0.20/expected_profile.json @@ -0,0 +1,5 @@ +{ + "test_name": "java_basic", + "scale_by_duration": true, + "stacks": [] +} diff --git a/scenarios/java_basic/CpuBurner.java b/scenarios/java_basic/CpuBurner.java index 0d5883c..25bda9e 100644 --- a/scenarios/java_basic/CpuBurner.java +++ b/scenarios/java_basic/CpuBurner.java @@ -4,7 +4,8 @@ public class CpuBurner { public static void main(String[] args) { - int numThreads = Runtime.getRuntime().availableProcessors(); + // int numThreads = Runtime.getRuntime().availableProcessors(); + int numThreads = 2; // avoid overloading system ExecutorService executor = Executors.newFixedThreadPool(numThreads); int executionTimeSec = Integer.parseInt(System.getenv().getOrDefault("EXECUTION_TIME_SEC", "60")); From 5d2d20d55ffc113b59e49698084a593ac1717000 Mon Sep 17 00:00:00 2001 From: r1viollet Date: Wed, 19 Mar 2025 18:12:55 +0100 Subject: [PATCH 4/4] Java - Add a dockerfile for alpine 3.21.3 and OpenJDK 21 --- .../java_alpine3.21.3_Java21/CpuBurner.java | 31 +++++++++++++++ scenarios/java_alpine3.21.3_Java21/Dockerfile | 38 +++++++++++++++++++ .../expected_profile.json | 5 +++ 3 files changed, 74 insertions(+) create mode 100644 scenarios/java_alpine3.21.3_Java21/CpuBurner.java create mode 100644 scenarios/java_alpine3.21.3_Java21/Dockerfile create mode 100644 scenarios/java_alpine3.21.3_Java21/expected_profile.json diff --git a/scenarios/java_alpine3.21.3_Java21/CpuBurner.java b/scenarios/java_alpine3.21.3_Java21/CpuBurner.java new file mode 100644 index 0000000..d865219 --- /dev/null +++ b/scenarios/java_alpine3.21.3_Java21/CpuBurner.java @@ -0,0 +1,31 @@ +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.TimeUnit; + +public class CpuBurner { + public static void main(String[] args) { + int numThreads = 2; + ExecutorService executor = Executors.newFixedThreadPool(numThreads); + + int executionTimeSec = Integer.parseInt(System.getenv().getOrDefault("EXECUTION_TIME_SEC", "60")); + + System.out.println("Starting CPU intensive tasks on " + numThreads + " threads for " + executionTimeSec + " seconds..."); + + for (int i = 0; i < numThreads; i++) { + executor.submit(() -> { + while (!Thread.currentThread().isInterrupted()) { + double value = Math.pow(Math.random(), Math.random()); + } + }); + } + + try { + Thread.sleep(executionTimeSec * 1000L); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + executor.shutdownNow(); + System.out.println("CPU intensive tasks stopped."); + } +} diff --git a/scenarios/java_alpine3.21.3_Java21/Dockerfile b/scenarios/java_alpine3.21.3_Java21/Dockerfile new file mode 100644 index 0000000..f5eefe5 --- /dev/null +++ b/scenarios/java_alpine3.21.3_Java21/Dockerfile @@ -0,0 +1,38 @@ +# Use Alpine latest as base image +FROM alpine:3.21.3 + + +# Install dependencies and Temurin JDK 21.0.6+7 +RUN apk add --no-cache \ + bash \ + curl \ + openjdk21 \ + && ln -sf /usr/lib/jvm/java-21-openjdk /opt/jdk-21.0.6+7 + +# Set JAVA_HOME environment variable +ENV JAVA_HOME=/opt/jdk-21.0.6+7 +ENV PATH="${JAVA_HOME}/bin:${PATH}" + +# Set environment variables for Datadog +ENV DD_SERVICE=cpu-burner-app +ENV DD_ENV=production +ENV DD_PROFILING_ENABLED=true +ENV DD_LOGS_INJECTION=true +ENV DD_TRACE_DEBUG=true +ENV DD_PROFILING_LOG_LEVEL=debug +ENV KEEP_JFRS=true + +# Install Datadog Java agent +RUN curl -LO https://dtdg.co/latest-java-tracer && mv latest-java-tracer dd-java-agent.jar + +# Set working directory +WORKDIR /app + +# Copy Java application to the container +COPY ./scenarios/java_basic/CpuBurner.java . + +# Compile Java application +RUN javac CpuBurner.java + +# Run the application with Datadog profiler +CMD ["java", "-javaagent:/dd-java-agent.jar", "CpuBurner"] diff --git a/scenarios/java_alpine3.21.3_Java21/expected_profile.json b/scenarios/java_alpine3.21.3_Java21/expected_profile.json new file mode 100644 index 0000000..9608c96 --- /dev/null +++ b/scenarios/java_alpine3.21.3_Java21/expected_profile.json @@ -0,0 +1,5 @@ +{ + "test_name": "java_basic", + "scale_by_duration": true, + "stacks": [] +}