安装mycat,网上教程很多,此处不必重复记录。直接到最后一步:
PS D:\mycat\mycat\bin> .\startup_nowrap.bat
...
D:\mycat\mycat\bin>"C:\openjdk17\current/bin/java" -server -Xms512M -Xmx512M -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=1G -DMYCAT_HOME=D:\myd\work\learning\springBoot\mycat\mycat -cp "..\conf;..\lib\*" io.mycat.MycatStartup
Unrecognized VM option 'MaxPermSize=64M'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
说明本VM不支持参数MaxPermSize=64M。
使用命令 vim .\startup_nowrap.bat
REM check JAVA_HOME & java
set "JAVA_CMD=%JAVA_HOME%/bin/java"
if "%JAVA_HOME%" == "" goto noJavaHome
if exist "%JAVA_HOME%\bin\java.exe" goto mainEntry
:noJavaHome
echo ---------------------------------------------------
echo WARN: JAVA_HOME environment variable is not set.
echo ---------------------------------------------------
set "JAVA_CMD=java"
:mainEntry
REM set HOME_DIR
set "CURR_DIR=%cd%"
cd ..
set "MYCAT_HOME=%cd%"
cd %CURR_DIR%
"%JAVA_CMD%" -server -Xms512M -Xmx512M -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=1G -DMYCAT_HOME=%MYCAT_HOME% -cp "..\conf;..\lib\*" io.mycat.MycatStartup
将代码中的-XX:MaxPermSize=64M去除。
再运行.\startup_nowrap.bat,出现不支持参数-XX:+AggressiveOpts。再次将startup_nowrap.bat文件中的参数-XX:+AggressiveOpts去除。再运行.\startup_nowrap.bat,出现如下错误:
Exception in thread "main" java.lang.IllegalAccessError: class io.mycat.buffer.ByteBufferPage (in unnamed module @0x18eed359) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x18eed359
at io.mycat.buffer.ByteBufferPage.<init>(ByteBufferPage.java:26)
at io.mycat.buffer.DirectByteBufferPool.<init>(DirectByteBufferPool.java:41)
at io.mycat.MycatServer.startup(MycatServer.java:304)
at io.mycat.MycatStartup.main(MycatStartup.java:57)
网上搜索,没有任何错误提示信息的解决方案。本人怀疑是jdk版本的问题,遂把jdk版本从当前版本openjdk17逐步升级到openjdk21版本。均出现上述问题。再把版本换成oracljdk系列版本也出现此问题。困扰本人好几天,无法解决。
那就把版本降到最低版本吧,当把版本降到openjdk9时,mycat启动成功。
2023-03-24 17:05:51,828 [INFO ][$_NIOREACTOR-1-RW] close connection,reason:stream closed ,MySQLConnection [id=1, lastTime=1679648751814, user=root, schema=db3, old shema=db3, borrowed=false, fromSlaveDB=false, threadId=250, charset=utf8, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=localhost, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false] (io.mycat.net.AbstractConnection:AbstractConnection.java:508)
MyCAT Server startup successfully. see logs in logs/mycat.log
用jps命令查看:
9816 MycatStartup
12284 Jps
看来版本匹配很重要,有时总以为版本高会兼容低版本,没放心上,有时真会给自己找很多麻烦。