Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
J
jdk17u
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
einsteinathome
openjdk
jdk17u
Commits
c14ca481
Commit
c14ca481
authored
10 years ago
by
Neil Toda
Committed by
Kumar Srinivasan
10 years ago
Browse files
Options
Downloads
Patches
Plain Diff
8042469: Launcher changes for native memory tracking scalability enhancement
Reviewed-by: darcy, ksrini, zgu
parent
6b6a37ee
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
jdk/src/share/bin/java.c
+66
-0
66 additions, 0 deletions
jdk/src/share/bin/java.c
jdk/src/share/bin/jli_util.h
+6
-1
6 additions, 1 deletion
jdk/src/share/bin/jli_util.h
jdk/test/tools/launcher/TestSpecialArgs.java
+133
-2
133 additions, 2 deletions
jdk/test/tools/launcher/TestSpecialArgs.java
with
205 additions
and
3 deletions
jdk/src/share/bin/java.c
+
66
−
0
View file @
c14ca481
...
@@ -98,6 +98,7 @@ static int numOptions, maxOptions;
...
@@ -98,6 +98,7 @@ static int numOptions, maxOptions;
*/
*/
static
void
SetClassPath
(
const
char
*
s
);
static
void
SetClassPath
(
const
char
*
s
);
static
void
SelectVersion
(
int
argc
,
char
**
argv
,
char
**
main_class
);
static
void
SelectVersion
(
int
argc
,
char
**
argv
,
char
**
main_class
);
static
void
SetJvmEnvironment
(
int
argc
,
char
**
argv
);
static
jboolean
ParseArguments
(
int
*
pargc
,
char
***
pargv
,
static
jboolean
ParseArguments
(
int
*
pargc
,
char
***
pargv
,
int
*
pmode
,
char
**
pwhat
,
int
*
pmode
,
char
**
pwhat
,
int
*
pret
,
const
char
*
jrepath
);
int
*
pret
,
const
char
*
jrepath
);
...
@@ -238,6 +239,10 @@ JLI_Launch(int argc, char ** argv, /* main argc, argc */
...
@@ -238,6 +239,10 @@ JLI_Launch(int argc, char ** argv, /* main argc, argc */
jvmpath
,
sizeof
(
jvmpath
),
jvmpath
,
sizeof
(
jvmpath
),
jvmcfg
,
sizeof
(
jvmcfg
));
jvmcfg
,
sizeof
(
jvmcfg
));
if
(
!
IsJavaArgs
())
{
SetJvmEnvironment
(
argc
,
argv
);
}
ifn
.
CreateJavaVM
=
0
;
ifn
.
CreateJavaVM
=
0
;
ifn
.
GetDefaultJavaVMInitArgs
=
0
;
ifn
.
GetDefaultJavaVMInitArgs
=
0
;
...
@@ -640,6 +645,67 @@ CheckJvmType(int *pargc, char ***argv, jboolean speculative) {
...
@@ -640,6 +645,67 @@ CheckJvmType(int *pargc, char ***argv, jboolean speculative) {
return
jvmtype
;
return
jvmtype
;
}
}
/*
* static void SetJvmEnvironment(int argc, char **argv);
* Is called just before the JVM is loaded. We can set env variables
* that are consumed by the JVM. This function is non-destructive,
* leaving the arg list intact. The first use is for the JVM flag
* -XX:NativeMemoryTracking=value.
*/
static
void
SetJvmEnvironment
(
int
argc
,
char
**
argv
)
{
static
const
char
*
NMT_Env_Name
=
"NMT_LEVEL_"
;
int
i
;
for
(
i
=
0
;
i
<
argc
;
i
++
)
{
/*
* The following case checks for "-XX:NativeMemoryTracking=value".
* If value is non null, an environmental variable set to this value
* will be created to be used by the JVM.
* The argument is passed to the JVM, which will check validity.
* The JVM is responsible for removing the env variable.
*/
char
*
arg
=
argv
[
i
];
if
(
JLI_StrCCmp
(
arg
,
"-XX:NativeMemoryTracking="
)
==
0
)
{
int
retval
;
// get what follows this parameter, include "="
size_t
pnlen
=
JLI_StrLen
(
"-XX:NativeMemoryTracking="
);
if
(
JLI_StrLen
(
arg
)
>
pnlen
)
{
char
*
value
=
arg
+
pnlen
;
size_t
pbuflen
=
pnlen
+
JLI_StrLen
(
value
)
+
10
;
// 10 max pid digits
/*
* ensures that malloc successful
* DONT JLI_MemFree() pbuf. JLI_PutEnv() uses system call
* that could store the address.
*/
char
*
pbuf
=
(
char
*
)
JLI_MemAlloc
(
pbuflen
);
JLI_Snprintf
(
pbuf
,
pbuflen
,
"%s%d=%s"
,
NMT_Env_Name
,
JLI_GetPid
(),
value
);
retval
=
JLI_PutEnv
(
pbuf
);
if
(
JLI_IsTraceLauncher
())
{
char
*
envName
;
char
*
envBuf
;
// ensures that malloc successful
envName
=
(
char
*
)
JLI_MemAlloc
(
pbuflen
);
JLI_Snprintf
(
envName
,
pbuflen
,
"%s%d"
,
NMT_Env_Name
,
JLI_GetPid
());
printf
(
"TRACER_MARKER: NativeMemoryTracking: env var is %s
\n
"
,
envName
);
printf
(
"TRACER_MARKER: NativeMemoryTracking: putenv arg %s
\n
"
,
pbuf
);
envBuf
=
getenv
(
envName
);
printf
(
"TRACER_MARKER: NativeMemoryTracking: got value %s
\n
"
,
envBuf
);
free
(
envName
);
}
}
}
}
}
/* copied from HotSpot function "atomll()" */
/* copied from HotSpot function "atomll()" */
static
int
static
int
parse_size
(
const
char
*
s
,
jlong
*
result
)
{
parse_size
(
const
char
*
s
,
jlong
*
result
)
{
...
...
This diff is collapsed.
Click to expand it.
jdk/src/share/bin/jli_util.h
+
6
−
1
View file @
c14ca481
/*
/*
* Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
4
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -64,17 +64,22 @@ int JLI_GetStdArgc();
...
@@ -64,17 +64,22 @@ int JLI_GetStdArgc();
#ifdef _WIN32
#ifdef _WIN32
#include
<windows.h>
#include
<windows.h>
#include
<io.h>
#include
<io.h>
#include
<process.h>
#define JLI_StrCaseCmp(p1, p2) stricmp((p1), (p2))
#define JLI_StrCaseCmp(p1, p2) stricmp((p1), (p2))
#define JLI_StrNCaseCmp(p1, p2, p3) strnicmp((p1), (p2), (p3))
#define JLI_StrNCaseCmp(p1, p2, p3) strnicmp((p1), (p2), (p3))
int
JLI_Snprintf
(
char
*
buffer
,
size_t
size
,
const
char
*
format
,
...);
int
JLI_Snprintf
(
char
*
buffer
,
size_t
size
,
const
char
*
format
,
...);
void
JLI_CmdToArgs
(
char
*
cmdline
);
void
JLI_CmdToArgs
(
char
*
cmdline
);
#define JLI_Lseek _lseeki64
#define JLI_Lseek _lseeki64
#define JLI_PutEnv _putenv
#define JLI_GetPid _getpid
#else
/* NIXES */
#else
/* NIXES */
#include
<unistd.h>
#include
<unistd.h>
#include
<strings.h>
#include
<strings.h>
#define JLI_StrCaseCmp(p1, p2) strcasecmp((p1), (p2))
#define JLI_StrCaseCmp(p1, p2) strcasecmp((p1), (p2))
#define JLI_StrNCaseCmp(p1, p2, p3) strncasecmp((p1), (p2), (p3))
#define JLI_StrNCaseCmp(p1, p2, p3) strncasecmp((p1), (p2), (p3))
#define JLI_Snprintf snprintf
#define JLI_Snprintf snprintf
#define JLI_PutEnv putenv
#define JLI_GetPid getpid
#ifdef __solaris__
#ifdef __solaris__
#define JLI_Lseek llseek
#define JLI_Lseek llseek
#endif
#endif
...
...
This diff is collapsed.
Click to expand it.
jdk/test/tools/launcher/TestSpecialArgs.java
+
133
−
2
View file @
c14ca481
/*
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012,
2014,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
/*
/*
* @test
* @test
* @bug 7124089 7131021
* @bug 7124089 7131021
8042469
* @summary Checks for MacOSX specific flags are accepted or rejected, and
* @summary Checks for MacOSX specific flags are accepted or rejected, and
* MacOSX platforms specific environment is consistent.
* MacOSX platforms specific environment is consistent.
* @compile -XDignore.symbol.file TestSpecialArgs.java EnvironmentVariables.java
* @compile -XDignore.symbol.file TestSpecialArgs.java EnvironmentVariables.java
...
@@ -69,6 +69,137 @@ public class TestSpecialArgs extends TestHelper {
...
@@ -69,6 +69,137 @@ public class TestSpecialArgs extends TestHelper {
throw
new
RuntimeException
(
"Error: argument was accepted ????"
);
throw
new
RuntimeException
(
"Error: argument was accepted ????"
);
}
}
}
}
/*
* test argument : -XX:NativeMemoryTracking=value
* A JVM flag, comsumed by the JVM, but requiring launcher
* to set an environmental variable if and only if value is supplied.
* Test and order:
* 1) execute with valid parameter: -XX:NativeMemoryTracking=MyValue
* a) check for correct env variable name: "NMT_LEVEL_" + pid
* b) check that "MyValue" was found in local env.
* 2) execute with invalid parameter: -XX:NativeMemoryTracking=
* !) Won't find "NativeMemoryTracking:"
* Code to create env variable not executed.
* 3) execute with invalid parameter: -XX:NativeMemoryTracking
* !) Won't find "NativeMemoryTracking:"
* Code to create env variable not executed.
* 4) give and invalid value and check to make sure JVM commented
*/
{
// NativeMemoryTracking
String
launcherPidString
=
"launcher.pid="
;
String
envVarPidString
=
"TRACER_MARKER: NativeMemoryTracking: env var is NMT_LEVEL_"
;
String
NMT_Option_Value
=
"off"
;
String
myClassName
=
"helloworld"
;
boolean
haveLauncherPid
=
false
;
// === Run the tests ===
// ---Test 1a
tr
=
doExec
(
envMap
,
javaCmd
,
"-XX:NativeMemoryTracking="
+
NMT_Option_Value
,
"-version"
);
// get the PID from the env var we set for the JVM
String
envVarPid
=
null
;
for
(
String
line
:
tr
.
testOutput
)
{
if
(
line
.
contains
(
envVarPidString
))
{
int
sindex
=
envVarPidString
.
length
();
envVarPid
=
line
.
substring
(
sindex
);
break
;
}
}
// did we find envVarPid?
if
(
envVarPid
==
null
)
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: failed to find env Var Pid in tracking info"
);
}
// we think we found the pid string. min test, not "".
if
(
envVarPid
.
length
()
<
1
)
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: env Var Pid in tracking info is empty string"
);
}
/*
* On Linux, Launcher Tracking will print the PID. Use this info
* to validate what we got as the PID in the Launcher itself.
* Linux is the only one that prints this, and trying to get it
* here for win is awful. So let the linux test make sure we get
* the valid pid, and for non-linux, just make sure pid string is
* non-zero.
*/
if
(
isLinux
)
{
// get what the test says is the launcher pid
String
launcherPid
=
null
;
for
(
String
line
:
tr
.
testOutput
)
{
int
index
=
line
.
indexOf
(
launcherPidString
);
if
(
index
>=
0
)
{
int
sindex
=
index
+
launcherPidString
.
length
();
int
tindex
=
sindex
+
line
.
substring
(
sindex
).
indexOf
(
"'"
);
System
.
out
.
println
(
"DEBUG INFO: sindex = "
+
sindex
);
System
.
out
.
println
(
"DEBUG INFO: searching substring: "
+
line
.
substring
(
sindex
));
System
.
out
.
println
(
"DEBUG INFO: tindex = "
+
tindex
);
// DEBUG INFO
System
.
out
.
println
(
tr
);
launcherPid
=
line
.
substring
(
sindex
,
tindex
);
break
;
}
}
if
(
launcherPid
==
null
)
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: failed to find launcher Pid in launcher tracking info"
);
}
// did we create the env var with the correct pid?
if
(!
launcherPid
.
equals
(
envVarPid
))
{
System
.
out
.
println
(
tr
);
System
.
out
.
println
(
"Error: wrong pid in creating env var"
);
System
.
out
.
println
(
"Error Info: launcherPid = "
+
launcherPid
);
System
.
out
.
println
(
"Error Info: envVarPid = "
+
envVarPid
);
throw
new
RuntimeException
(
"Error: wrong pid in creating env var"
);
}
}
// --- Test 1b
if
(!
tr
.
contains
(
"NativeMemoryTracking: got value "
+
NMT_Option_Value
))
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: Valid param failed to set env variable"
);
}
// --- Test 2
tr
=
doExec
(
envMap
,
javaCmd
,
"-XX:NativeMemoryTracking="
,
"-version"
);
if
(
tr
.
contains
(
"NativeMemoryTracking:"
))
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: invalid param caused env variable to be erroneously created"
);
}
if
(!
tr
.
contains
(
"Syntax error, expecting -XX:NativeMemoryTracking="
))
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: invalid param not checked by JVM"
);
}
// --- Test 3
tr
=
doExec
(
envMap
,
javaCmd
,
"-XX:NativeMemoryTracking"
,
"-version"
);
if
(
tr
.
contains
(
"NativeMemoryTracking:"
))
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: invalid param caused env variable to be erroneously created"
);
}
if
(!
tr
.
contains
(
"Syntax error, expecting -XX:NativeMemoryTracking="
))
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: invalid param not checked by JVM"
);
}
// --- Test 4
tr
=
doExec
(
envMap
,
javaCmd
,
"-XX:NativeMemoryTracking=BADVALUE"
,
"-version"
);
if
(!
tr
.
contains
(
"expecting -XX:NativeMemoryTracking"
))
{
System
.
out
.
println
(
tr
);
throw
new
RuntimeException
(
"Error: invalid param did not get JVM Syntax error message"
);
}
}
// NativeMemoryTracking
// MacOSX specific tests ensue......
// MacOSX specific tests ensue......
if
(!
isMacOSX
)
if
(!
isMacOSX
)
return
;
return
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment