[ 
https://issues.apache.org/jira/browse/SOLR-15410?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17346468#comment-17346468
 ] 

Colvin Cowie commented on SOLR-15410:
-------------------------------------

While looking at why it behaves differently on Linux, I've noticed that the 
solr.cmd determines that Open J9 is being used in a way that works by chance. 
It does this

 
{code:java}
:resolve_java_vendor
"%JAVA%" -version 2>&1 | findstr /i "IBM J9" > nul
if %ERRORLEVEL% == 1 ( set "JAVA_VENDOR=Oracle" ) else ( set "JAVA_VENDOR=IBM 
J9" )
{code}
 

The doc for findstr states that space is a separator for multiple search terms 
if /C: isn't used.

 
{noformat}
  /C:string  Uses specified string as a literal search string.

             Specifies a file or files to search.Use spaces to separate 
multiple search strings unless the argument is prefixed
with /C.  For example, 'FINDSTR "hello there" x.y' searches for "hello" or
"there" in file x.y.  'FINDSTR /C:"hello there" x.y' searches for
"hello there" in file x.y.{noformat}
 

So it's matching on "IBM" or "J9". So the Open J9 output matches J9 only:

 
{noformat}
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.24.0, JRE 11 Windows 10 
amd64-64-Bit Compressed References 20210120_899 (JIT enabled, AOT enabled)
OpenJ9   - 345e1b09e
OMR      - 741e94ea8
JCL      - 0a86953833 based on jdk-11.0.10+9){noformat}
 

The solr bash script does the "same" thing, except grep is matching "IBM J9", 
so Open J9 is not detected as IBM J9 on linux.
{code:java}
  if [ "`echo $JAVA_VER | grep -i "IBM J9"`" != "" ]; then
      JAVA_VENDOR="IBM J9"
  fi
{code}
 

> GC log is directed to console when starting Solr with Java 11 Open J9 on 
> Windows
> --------------------------------------------------------------------------------
>
>                 Key: SOLR-15410
>                 URL: https://issues.apache.org/jira/browse/SOLR-15410
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>            Reporter: Colvin Cowie
>            Priority: Minor
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> This was raised on the mailing list a few months ago: 
> [https://lucene.472066.n3.nabble.com/Unrecognized-command-line-option-when-starting-Solr-8-7-with-Java-11-Open-J9-td4470190.html]
>  
> Running Solr with OOTB options when using Eclipse Open J9 "11.0.10"+ you get 
> an error message stating that the -Xlog:gc option is unrecognised, and the GC 
> log is written to the console:
> {noformat}
> "C:\solr\solr-8.6.2\bin\solr.cmd" start -cloud -p 8888 -s 
> "C:\solr\solr-8.6.2\example\cloud\node1\solr"
> JVMJ9VM007W Command-line option unrecognised: 
> -Xlog:gc*:file="C:\solr\solr-8.6.2\example\cloud\node1\solr\..\logs\solr_gc.log":time,uptime:filecount=9,filesize=20M
> JVMJ9GC063E Unable to open file '"C' for writing
> <?xml version="1.0" ?>
> <verbosegc xmlns="http://www.ibm.com/j9/verbosegc"; version="741e94ea8_CMPRSS">
> <initialized id="1" timestamp="2021-05-17T20:52:49.185">
>   <attribute name="gcPolicy" value="-Xgcpolicy:gencon" />
>   ...etc...{noformat}
>  
> As pointed out on the mailing list, Open J9 changed their handling of -Xlog 
> options in OpenJ9 0.24.0 (January 2021), so that's presumably the first 
> version of Open J9 affected by this issue.
> The {{-Xlog:gc:<filename>}} syntax is replaced with 
> {{-Xverbosegclog:<updated_filename>}} according to 
> [https://www.eclipse.org/openj9/docs/xlog/]  
> While the bin/solr.cmd has logic for setting {{-Xverbosegclog}} when using 
> Open J9 ("IBM J9"), that isn't hit because of this conditional block that was 
> added in 2017 
> [https://github.com/apache/solr/commit/86f7d6779a8fee56e4497fde7d8936e916b00814#diff-118de7ae5d9fc032e479321cb4d3ee62ceb68e9f3c845292b44c5e14c0f769cfR1116]
>  which means that all versions >= 9 get the same 
> "GC_LOG_OPTS="-Xlog:gc*:file".
> [~uschindler]'s comment at the time was that ??Java 9 is detected before IBM 
> J9. Because IBM J9 for Java 9 will handle the command line options like 
> Oracle?? which seems like it was true until Open J9 0.24.0, but no longer 
> holds for newer versions.
> I don't know how many people would be using earlier releases of OpenJ9 on 
> Windows, but I checked jdk-9.0.4+12_openj9-0.9.0 (August 2018) and 
> jdk-11.0.8+10_openj9-0.21.0 (July 2020) and they both started correctly with 
> GC logging using the IBM J9 java options already in the solr.cmd file. So 
> those options seem to work for OpenJ9 in general. Therefore Lisa's suggestion 
> of changing the version check to {{if !JAVA_MAJOR_VERSION! GEQ 9 if NOT 
> "%JAVA_VENDOR%" == "IBM J9" (}} works and would also allow GC_LOG_OPTS to be 
> set in solr.in.cmd for Open J9 users.
> Otherwise to use the GC_LOG_OPTS hardcoded in the Java 9+ branch of the 
> solr.cmd, the {{-XX:+LegacyXlogOption}} could be used to revert -Xlog in Open 
> J9 to its previous behaviour, allowing it to parse {{-Xlog:gc}}.
>  
> On Linux the bin/solr --the error appears in the solr console log rather than 
> the console itself and but the GC log is still created correctly - which is 
> strange.
>  
> {noformat}
> JVMJ9VM007W Command-line option unrecognised: 
> -Xlog:gc*:file=/solr/server/logs/8983/solr_gc.log:time,uptime:filecount=9,filesize=20M{noformat}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to