3

I have recently migrated some scheduled jobs from a Windows Server 2012 virtual server to a new Windows Server 2019 virtual server, and have noticed some notable performance degradation in certain jobs. Particularly, jobs which communicate with our DB2 database using an AS400 JDBC connection pool data source. The database is hosted on an IBM iSeries AS/400.

On Windows Server 2019, using jdk1.8.0_131, I'm running the following command:

java -jar myproject.jar

This project simply connects to the DB2 database and executes an SQL update command. On other servers, the same command will take ~2.5 minutes, but on Windows Server 2019 it takes anywhere from 15 minutes to over an hour. I have monitored CPU, RAM, and network activity on the server and database while the job is running, and nothing stands out. Below are the results of testing on various operating systems and JDKs:

| Server                              | JDK       | Runtime               |
|-------------------------------------|-----------|-----------------------|
| Windows Server 2012                 | 1.8.0_131 | ~2.5 minutes          |
| Windows Server 2016 (Fresh Install) | 1.8.0_131 | ~2.5 minutes          |
| Windows Server 2019 (Production)    | 1.8.0_131 | 15 minutes to an hour |
| Windows Server 2019 (Fresh Install) | 1.8.0_131 | 15 minutes to an hour |
| Windows Server 2019 (Fresh Install) | 1.8.0_202 | 15 minutes to an hour |

As shown above, I tried on a fresh install of server 2016 and did not experience the performance issues, but when I tried on a fresh install of Windows Server 2019, I was able to replicate the performance degradation.

These are all virtual servers with the same amount of CPU, RAM, and running on the same host.

  • Approximately how many rows is your project updating? – Gilbert Le Blanc Feb 27 '20 at 01:47
  • may be GC related? – Eugene Feb 27 '20 at 03:48
  • @Eugene why would it make a difference which server it's on if it's the same jdk? – Erick Figueroa Feb 27 '20 at 17:43
  • I am also experiencing the same issue when migrating the Windows Server 2008 R2 to Windows Sever 2019 with SSIS packages, it is much slower to load data between Sybase and SQL Server database in Windows Server 2019 with the same server configs :( – Ling Apr 22 '20 at 00:12
  • @Ling out of curiosity, are you running this code on a virtual server? I have a suspicion that it may be an issue with the hypervisor not being supported according the oracle certified system configurations for JDK 8: https://www.oracle.com/java/technologies/javase/jdk-jre-8-cs-config.html – Erick Figueroa Apr 23 '20 at 02:25
  • I am seeing something similar, in a method doing lots of queries to a DB2 database in a loop. It takes 4-14 seconds on Win10, Server 2012R2 & Server 2016 systems and 150 seconds on Server 2019. All co-located with Power9, <1ms ping time. Queries run in a few ms on Power9 and it waits 30+ms between queries from the slow systems. On 2019 systems ~50% time consistently spent in ResultSet.getYYY(). On fast systems it ranges from 10-60%. jt400-jdk8-9.6 driver, jdk8 various versions (171, 202, 251, 321) – jla Mar 23 '22 at 02:10

2 Answers2

0

Java support Server 2019 after 1.8.0_201 only.

https://www.oracle.com/java/technologies/javase/products-doc-jdk8-jre8-certconfig.html

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
0

Its due to a change in the Windows 2019 network algorithm. You can disable this behavior by setting the "TcpNoDelay" property to true.

https://sourceforge.net/p/jt400/bugs/454/

Woo
  • 41
  • 3