IBM Support

Disabling AIO (Asynchronous Input/Output) native transport in WebSphere Application Server

Troubleshooting


Problem

IBM Support might request you to disable the AIO native transport code. In certain cases, this code can have a fairly large native memory footprint, and if the application server is short on native memory, disabling the AIO native transport can increase the available address space for native memory.

Environment

IBM WebSphere Application Server on Windows, AIX, Linux and HP-UX.
On Solaris, only for versions 7.0.0.5 and earlier, and 6.1.0.17 and earlier. Later WebSphere versions on Solaris no longer have this library.

Diagnosing The Problem

IBM Support will be able to tell you if you are seeing an issue with the AIO native code and may recommend disabling it.

Resolving The Problem

To disable the AIO native transport code you can set a WebContainer property or you can remove the AIO native library files. If you set the commClass WebContainer property then WebSphere Application Server will use the New I/O code (part of the JVM) to return response data to users instead of the AIO library. WebSphere checks for the existence of the AIO native libraries, and if they do not exist, defaults to use the JVM's New I/O code.

Setting the WebContainer property is the easiest (Method 1) and also the safest, as if you remove or rename the AIO native libraries, then they may be re-enabled the next time you apply a WebSphere Fix Pack.

NOTE: WebSphere's AIO is independent from the AIO feature in AIX (aio_active).



Method 1: To disable the AIO library with the WebContainer property:

To set the commClass property, you will need to use a wsadmin script.

To change a group of servers (server1 and server2) run the following jacl script:

global AdminConfig
set srvlist [$AdminConfig list Server]
foreach srv $srvlist {
    set name [$AdminConfig showAttribute $srv name]
    if {$name == "server1" ||
        $name == "server2"} {
        set svc [$AdminConfig list TransportChannelService $srv]
        set fact [$AdminConfig create TCPFactory $svc {}]
        $AdminConfig create Property $fact {{name commClass} {value com.ibm.ws.tcp.channel.impl.NioTCPChannel}}
        puts [$AdminConfig showAttribute $svc factories]
    }
}
$AdminConfig save

To change a stand-alone server you would run the following jacl script:

global AdminConfig
set svc [$AdminConfig list TransportChannelService]
set fact [$AdminConfig create TCPFactory $svc {}]
$AdminConfig create Property $fact {{name commClass} {value com.ibm.ws.tcp.channel.impl.NioTCPChannel}}
$AdminConfig save

You will need to edit the script for the application servers you wish to disable AIO for.


To re-enable the AIO native library after using this method, set the value of the commClass property to “com.ibm.ws.tcp.channel.impl.AioTCPChannel”.

Instead of:
{{name commClass} {value com.ibm.ws.tcp.channel.impl.NioTCPChannel}}
use:
{{name commClass} {value com.ibm.ws.tcp.channel.impl.AioTCPChannel}}



Method 2: To disable the AIO library by renaming the native libraries:

You can remove the libraries, but it is better to just rename the libraries in the same directory so you will know where they are in case you need to re-enable them. Since they are native libraries and not Java .jar files, the name is critical for them to be loaded, so you can just change the extension of the libraries to something else.

For WebSphere 8 and higher, the libraries are located in the install_root/bin/ and
install_root/lib/native/Operating System/Architecture/ directories.
ex.
AppServer/bin/
AppServer/lib/native/linux/x86_64/
AppServer/lib/native/linux/x86_32/

AppServer/bin/
AppServer/lib/native/aix/ppc_32/
AppServer/lib/native/aix/ppc_64/

For WebSphere 7 and 6.1, the libraries are located only in the install_root/bin directory

  • UNIX:

  • mv libibmaio.so libibmaio.disabled
    mv libibmaiodbg.so libibmaiodbg.disabled

  • Windows:

  • move ibmaio.dll ibmaio.dis
    move ibmaiodbg.dll ibmaiodbg.dis

The application server must be recycled after the libraries have been removed or renamed.


Note: Whenever a WebSphere Fix Pack is installed, the AIO libraries may get reinstalled. You will then need to rename them again.

[{"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Component":"Out of Memory","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF033","label":"Windows"}],"Version":"9.0;8.5;8.0;7.0;6.1","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]

Document Information

Modified date:
15 June 2018

UID

swg21366862