IBM Support

PI74586: Liberty server will not start if jvm.options file contains spaces, after upgrade to 16.0.0.4

Fixes are available

17.0.0.1: WebSphere Application Server Liberty 17.0.0.1
17.0.0.2: WebSphere Application Server Liberty 17.0.0.2
17.0.0.3: WebSphere Application Server Liberty 17.0.0.3
17.0.0.4: WebSphere Application Server Liberty 17.0.0.4
18.0.0.1: WebSphere Application Server Liberty 18.0.0.1
18.0.0.2: WebSphere Application Server Liberty 18.0.0.2
18.0.0.3: WebSphere Application Server Liberty 18.0.0.3
18.0.0.4: WebSphere Application Server Liberty 18.0.0.4
19.0.0.1: WebSphere Application Server Liberty 19.0.0.1
19.0.0.2: WebSphere Application Server Liberty 19.0.0.2
19.0.0.3: WebSphere Application Server Liberty 19.0.0.3
19.0.0.4: WebSphere Application Server Liberty 19.0.0.4
19.0.0.5: WebSphere Application Server Liberty 19.0.0.5
19.0.0.6: WebSphere Application Server Liberty 19.0.0.6
19.0.0.7: WebSphere Application Server Liberty 19.0.0.7
19.0.0.8: WebSphere Application Server Liberty 19.0.0.8
19.0.0.9: WebSphere Application Server Liberty 19.0.0.9
19.0.0.10: WebSphere Application Server Liberty 19.0.0.10
19.0.0.11: WebSphere Application Server Liberty 19.0.0.11
19.0.0.12: WebSphere Application Server Liberty 19.0.0.12
20.0.0.1: WebSphere Application Server Liberty 20.0.0.1
20.0.0.2: WebSphere Application Server Liberty 20.0.0.2
20.0.0.3: WebSphere Application Server Liberty 20.0.0.3
20.0.0.4: WebSphere Application Server Liberty 20.0.0.4
20.0.0.5: WebSphere Application Server Liberty 20.0.0.5
20.0.0.6: WebSphere Application Server Liberty 20.0.0.6
20.0.0.7: WebSphere Application Server Liberty 20.0.0.7
20.0.0.8: WebSphere Application Server Liberty 20.0.0.8
20.0.0.9: WebSphere Application Server Liberty 20.0.0.9
20.0.0.10: WebSphere Application Server Liberty 20.0.0.10
20.0.0.11: WebSphere Application Server Liberty 20.0.0.11
20.0.0.12: WebSphere Application Server Liberty 20.0.0.12

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • It looks like the problem is in the jvm.options file
    -- see the following line:
    -Dtsnm.baseDir=C:\Program Files\IBM\TPC\alert
    
    From the start.log the command used to start the server:
    
    Command:  "C:\Program Files\IBM\TPC\jre\bin\java"
    "-javaagent:C:\Program
    Files\IBM\TPC\wlp\bin\tools\ws-javaagent.jar"
    -Djava.awt.headless=true
    -Xmx1536m -Xgc:preferredHeapBase=0x100000000 -Dwlp=true
    -Dtpc.environment=CEPServer -Dtsnm.baseDir=C:\Program
    Files\IBM\TPC\alert -Djlog.logCmdPort=9570 -Xverify:none
    -verbose:class
    -Dws.ext.debug   -jar "C:\Program
    Files\IBM\TPC\wlp\bin\tools\ws-server.jar" --batch-file
    start
    alertServer
    
    All of the paths in the command are quoted except for the
    tsnm.baseDir system property that is specified in the
    jvm.options file.  As such, the shell interprets that as two
    different tokens and thinks that you are trying to set a
    system
    property "-Dtsnm.baseDir=C:\Program" and then run
    a Java application called "Files\IBM\TPC\alert".
    
    Changes made to the server.bat,  a change was made to
    support
    jvm.options merging -- to allow multiple jvm.options files
    (previous to 16.0.0.4 users were limited to either the
    jvm.options file in the server directory or in the wlp/etc
    directory -- now there is a lot more flexibility).  It seems
    that change may have inadvertently removed quotes when
    reading
    lines from the jvm.options file.
    

Local fix

  • in the server.bat/.sh change
    -Dtsnm.baseDir=C:\Program Files\IBM\TPC\alert
    to
    -Dtsnm.baseDir="C:\Program Files\IBM\TPC\alert"
    

Problem summary

  • ****************************************************************
    * USERS AFFECTED:  All users of IBM WebSphere Application      *
    *                  Server Liberty on Microsoft Windows         *
    *                  operating systems                           *
    ****************************************************************
    * PROBLEM DESCRIPTION: Liberty 16.0.0.4 server will not start  *
    *                      if jvm.options file contains spaces     *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    In Liberty 16.0.0.4, a new feature was added that allows merging
    of multiple jvm.options files.  This new feature inadvertently
    removed the quotation marks applied to each line of the
    jvm.options files.  If the jvm.options files did not contain any
    spaces or other whitespace, then the user may not see any
    problem.  The problem arises when a space exists in the
    jvm.options file - in that case, the server would not start.
    For example, if the jvm.options file contained a line like the
    following:
    -DmyProperty=Contains Spaces
    
    The server would fail to start with a message like this in the
    console.log file:
    
    Error: Could not find or load main class Spaces
    
    In the start.log file, the user may see the exact command used
    to try to start the server -- something like this:
    Command:  "C:\Program Files\IBM\WebSphere\jre\bin\java" "-
    javaagent:C:\Program Files\IBM\WebSphere\wlp\bin\tools\ws-
    javaagent.jar" -Djava.awt.headless=true  -Xmx1024m -
    DmyProperty=Contains Spaces -Xverify:none -verbose:class -
    Dws.ext.debug   -jar "C:\Program Files\IBM\TPC\wlp\bin\tools\ws-
    server.jar" --batch-file start defaultServer
    
    Note that in the command, most of the arguments are quoted which
    tells the Windows command interpreter to ignore the spaces
    inside the quotes.  Since the property from the jvm.options file
    (-DmyProperty=Contains Spaces) is not quoted, the Windows
    command interpreter interprets this property as two separate
    arguments ("-DmyProperty=Contains" and "Spaces") and when it
    passes those arguments to the JVM, the JVM sees "Spaces" as the
    first argument that does not start with a dash, so it assumes
    that is the name of the main class to execute, which it cannot
    find.
    

Problem conclusion

Temporary fix

Comments

APAR Information

  • APAR number

    PI74586

  • Reported component name

    WAS LIBERTY COR

  • Reported component ID

    5725L2900

  • Reported release

    CD0

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2017-01-09

  • Closed date

    2017-02-08

  • Last modified date

    2017-02-08

  • APAR is sysrouted FROM one or more of the following:

    PI74463

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    WAS LIBERTY COR

  • Fixed component ID

    5725L2900

Applicable component levels

  • RCD0 PSY

       UP

[{"Business Unit":{"code":"BU053","label":"Cloud \u0026 Data Platform"},"Product":{"code":"SSD28V","label":"WebSphere Application Server Liberty Core"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"CD0","Line of Business":{"code":"LOB36","label":"IBM Automation"}}]

Document Information

Modified date:
18 October 2021