Skip to content

Commit 5274d38

Browse files
jtulianimaxday
andcommitted
Profiler updates (#78)
* Profiler updates Moved profiler to 'experimental' folder Added AWS_LAMBDA_ prefix to env vars Updated README.md * fix: IAM permissions, wrapper, port communication and integration test --------- Co-authored-by: Maxime David <[email protected]>
1 parent 8023cef commit 5274d38

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+140
-115
lines changed

.github/workflows/aws-lambda-java-profiler.yml

+7-7
Original file line numberDiff line numberDiff line change
@@ -39,27 +39,27 @@ jobs:
3939
role-duration-seconds: 900
4040

4141
- name: Build layer
42-
working-directory: ./aws-lambda-java-profiler/extension
42+
working-directory: ./experimental/aws-lambda-java-profiler/extension
4343
run: ./build_layer.sh
4444

4545
- name: Publish layer
46-
working-directory: ./aws-lambda-java-profiler
46+
working-directory: ./experimental/aws-lambda-java-profiler
4747
run: ./integration_tests/publish_layer.sh
4848

4949
- name: Create the bucket layer
50-
working-directory: ./aws-lambda-java-profiler
50+
working-directory: ./experimental/aws-lambda-java-profiler
5151
run: ./integration_tests/create_bucket.sh
5252

5353
- name: Create Java function
54-
working-directory: ./aws-lambda-java-profiler
54+
working-directory: ./experimental/aws-lambda-java-profiler
5555
run: ./integration_tests/create_function.sh
5656

5757
- name: Invoke Java function
58-
working-directory: ./aws-lambda-java-profiler
58+
working-directory: ./experimental/aws-lambda-java-profiler
5959
run: ./integration_tests/invoke_function.sh
6060

6161
- name: Download from s3
62-
working-directory: ./aws-lambda-java-profiler
62+
working-directory: ./experimental/aws-lambda-java-profiler
6363
run: ./integration_tests/download_from_s3.sh
6464

6565
- name: Upload profiles
@@ -70,5 +70,5 @@ jobs:
7070

7171
- name: cleanup
7272
if: always()
73-
working-directory: ./aws-lambda-java-profiler
73+
working-directory: ./experimental/aws-lambda-java-profiler
7474
run: ./integration_tests/cleanup.sh

.gitignore

+4-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ dependency-reduced-pom.xml
3030
aws-lambda-java-runtime-interface-client/pom.xml.versionsBackup
3131

3232
# profiler
33-
aws-lambda-java-profiler/integration_tests/helloworld/build
34-
aws-lambda-java-profiler/extension/build/
33+
experimental/aws-lambda-java-profiler/integration_tests/helloworld/build
34+
experimental/aws-lambda-java-profiler/extension/build/
35+
experimental/aws-lambda-java-profiler/integration_tests/helloworld/bin
36+
!experimental/aws-lambda-java-profiler/extension/gradle/wrapper/*.jar
3537
/scratch/

aws-lambda-java-profiler/README.md

-89
This file was deleted.

aws-lambda-java-profiler/examples/cdk/src/main/java/com/myorg/InfraStack.java renamed to experimental/aws-lambda-java-profiler/examples/cdk/src/main/java/com/myorg/InfraStack.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public InfraStack(final Construct scope, final String id, final StackProps props
3636
.build();
3737

3838
var environmentVariables = Map.of("JAVA_TOOL_OPTIONS", "-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -javaagent:/opt/profiler.jar",
39-
"PROFILER_RESULTS_BUCKET_NAME", resultsBucketName);
39+
"AWS_LAMBDA_PROFILER_RESULTS_BUCKET_NAME", resultsBucketName);
4040

4141
var function = Function.Builder.create(this, "example-profiler-function")
4242
.runtime(JAVA_21)

aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/ExtensionClient.java renamed to experimental/aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/ExtensionClient.java

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ public class ExtensionClient {
2323
" ]" +
2424
" }";
2525
private static final String LAMBDA_EXTENSION_IDENTIFIER = "Lambda-Extension-Identifier";
26-
private static final String LAMBDA_EXTENSION_FUNCTION_ERROR_TYPE = "Lambda-Extension-Function-Error-Type";
2726
private static final HttpClient client = HttpClient.newBuilder().build();
2827

2928
public static String registerExtension() {

aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/ExtensionMain.java renamed to experimental/aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/ExtensionMain.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class ExtensionMain {
1515
private static boolean coldstart = true;
1616
private static final String REQUEST_ID = "requestId";
1717
private static final String EVENT_TYPE = "eventType";
18+
private static final String INTERNAL_COMMUNICATION_PORT = System.getenv().getOrDefault("AWS_LAMBDA_PROFILER_COMMUNICATION_PORT", "1234");
1819
public static final String HEADER_NAME = "X-FileName";
1920

2021
private static S3Manager s3Manager;
@@ -100,9 +101,10 @@ private static String extractInfo(String info, String jsonString) {
100101

101102
private static void startProfiler() {
102103
try {
103-
HttpRequest request = HttpRequest.newBuilder()
104+
String url = String.format("http://localhost:%s/profiler/start", INTERNAL_COMMUNICATION_PORT);
105+
HttpRequest request = HttpRequest.newBuilder()
104106
.GET()
105-
.uri(URI.create("http://localhost:1234/profiler/start"))
107+
.uri(URI.create(url))
106108
.build();
107109
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
108110
if (response.statusCode() == 200) {
@@ -116,10 +118,11 @@ private static void startProfiler() {
116118

117119
private static void stopProfiler(String fileNameSuffix) {
118120
try {
121+
String url = String.format("http://localhost:%s/profiler/stop", INTERNAL_COMMUNICATION_PORT);
119122
HttpRequest request = HttpRequest.newBuilder()
120123
.GET()
121124
.setHeader(HEADER_NAME, fileNameSuffix)
122-
.uri(URI.create("http://localhost:1234/profiler/stop"))
125+
.uri(URI.create(url))
123126
.build();
124127
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
125128
if (response.statusCode() == 200) {

aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/Logger.java renamed to experimental/aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/Logger.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class Logger {
88
private static final String PREFIX = "[PROFILER] ";
99

1010
private static boolean initializeDebugFlag() {
11-
String envValue = System.getenv("PROFILER_DEBUG");
11+
String envValue = System.getenv("AWS_LAMBDA_PROFILER_DEBUG");
1212
return "true".equalsIgnoreCase(envValue) || "1".equals(envValue);
1313
}
1414

aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/PreMain.java renamed to experimental/aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/PreMain.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717

1818
public class PreMain {
1919

20-
private static final String DEFAULT_PROFILER_START_COMMAND = "start,event=wall,interval=1us";
21-
private static final String DEFAULT_PROFILER_STOP_COMMAND = "stop,file=%s,include=*AWSLambda.main,include=start_thread";
22-
private static final String PROFILER_START_COMMAND = System.getenv().getOrDefault("PROFILER_START_COMMAND", DEFAULT_PROFILER_START_COMMAND);
23-
private static final String PROFILER_STOP_COMMAND = System.getenv().getOrDefault("PROFILER_STOP_COMMAND", DEFAULT_PROFILER_STOP_COMMAND);
24-
private static final String INTERNAL_COMMUNICATION_PORT = System.getenv().getOrDefault("PROFILER_COMMUNICATION_PORT", "1234");
20+
private static final String DEFAULT_AWS_LAMBDA_PROFILER_START_COMMAND = "start,event=wall,interval=1us";
21+
private static final String DEFAULT_AWS_LAMBDA_PROFILER_STOP_COMMAND = "stop,file=%s,include=*AWSLambda.main,include=start_thread";
22+
private static final String PROFILER_START_COMMAND = System.getenv().getOrDefault("AWS_LAMBDA_PROFILER_START_COMMAND", DEFAULT_AWS_LAMBDA_PROFILER_START_COMMAND);
23+
private static final String PROFILER_STOP_COMMAND = System.getenv().getOrDefault("AWS_LAMBDA_PROFILER_STOP_COMMAND", DEFAULT_AWS_LAMBDA_PROFILER_STOP_COMMAND);
24+
private static final String INTERNAL_COMMUNICATION_PORT = System.getenv().getOrDefault("AWS_LAMBDA_PROFILER_COMMUNICATION_PORT", "1234");
2525

2626
public static void premain(String agentArgs, Instrumentation inst) {
2727
Logger.debug("premain is starting");

aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/S3Manager.java renamed to experimental/aws-lambda-java-profiler/extension/src/main/java/com/amazonaws/services/lambda/extension/S3Manager.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
public class S3Manager {
1616

17-
private static final String RESULTS_BUCKET = "PROFILER_RESULTS_BUCKET_NAME";
17+
private static final String RESULTS_BUCKET = "AWS_LAMBDA_PROFILER_RESULTS_BUCKET_NAME";
1818
private static final String FUNCTION_NAME = System.getenv().getOrDefault("AWS_LAMBDA_FUNCTION_NAME", "function");
1919
private S3Client s3Client;
2020
private String bucketName;
@@ -23,7 +23,7 @@ public S3Manager() {
2323
final String bucketName = System.getenv(RESULTS_BUCKET);
2424
Logger.debug("creating S3Manager with bucketName = " + bucketName);
2525
if (null == bucketName || bucketName.isEmpty()) {
26-
throw new IllegalArgumentException("please set the bucket name using PROFILER_RESULTS_BUCKET_NAME environment variable");
26+
throw new IllegalArgumentException("please set the bucket name using AWS_LAMBDA_PROFILER_RESULTS_BUCKET_NAME environment variable");
2727
}
2828
this.s3Client = S3Client.builder().build();
2929
this.bucketName = bucketName;

aws-lambda-java-profiler/integration_tests/create_function.sh renamed to experimental/aws-lambda-java-profiler/integration_tests/create_function.sh

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ RUNTIME="java21"
88
LAYER_ARN=$(cat /tmp/layer_arn)
99

1010
JAVA_TOOL_OPTIONS="-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -javaagent:/opt/profiler-extension.jar"
11-
PROFILER_RESULTS_BUCKET_NAME="aws-lambda-java-profiler-bucket-${GITHUB_RUN_ID}"
11+
AWS_LAMBDA_PROFILER_RESULTS_BUCKET_NAME="aws-lambda-java-profiler-bucket-${GITHUB_RUN_ID}"
1212

1313
# Compile the Hello World project
1414
cd integration_tests/helloworld
@@ -35,7 +35,7 @@ POLICY_DOCUMENT=$(cat <<EOF
3535
{
3636
"Effect": "Allow",
3737
"Action": "s3:PutObject",
38-
"Resource": "arn:aws:s3:::$PROFILER_RESULTS_BUCKET_NAME/*"
38+
"Resource": "arn:aws:s3:::$AWS_LAMBDA_PROFILER_RESULTS_BUCKET_NAME/*"
3939
}
4040
]
4141
}
@@ -60,7 +60,7 @@ aws lambda create-function \
6060
--timeout 30 \
6161
--memory-size 512 \
6262
--zip-file fileb://integration_tests/helloworld/build/distributions/code.zip \
63-
--environment "Variables={JAVA_TOOL_OPTIONS='$JAVA_TOOL_OPTIONS',PROFILER_RESULTS_BUCKET_NAME='$PROFILER_RESULTS_BUCKET_NAME',PROFILER_DEBUG='true'}" \
63+
--environment "Variables={JAVA_TOOL_OPTIONS='$JAVA_TOOL_OPTIONS',AWS_LAMBDA_PROFILER_RESULTS_BUCKET_NAME='$AWS_LAMBDA_PROFILER_RESULTS_BUCKET_NAME',AWS_LAMBDA_PROFILER_DEBUG='true'}" \
6464
--layers "$LAYER_ARN"
6565

6666
echo "Lambda function '$FUNCTION_NAME' created successfully with Java 21 runtime"

aws-lambda-java-profiler/update-function.sh renamed to experimental/aws-lambda-java-profiler/update-function.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ aws lambda update-function-configuration \
3434
# Add environment variables
3535
aws lambda update-function-configuration \
3636
--function-name "$FUNCTION_NAME" \
37-
--environment "Variables={PROFILER_RESULTS_BUCKET_NAME=$BUCKET_NAME, JAVA_TOOL_OPTIONS=-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -javaagent:/opt/profiler-extension.jar}"
37+
--environment "Variables={AWS_LAMBDA_PROFILER_RESULTS_BUCKET_NAME=$BUCKET_NAME, JAVA_TOOL_OPTIONS=-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -javaagent:/opt/profiler-extension.jar}"
3838

3939
# Update the function's permissions to write to the S3 bucket
4040
# Get the function's execution role

0 commit comments

Comments
 (0)