Virtual Private Server - Linux

三种常见VPN技术解析
本文对比分析了IPSec VPN(Swan)、PPTP VPN(PPTPD)和SSL VPN(OpenVPN)三种技术。IPSec VPN安全性高但配置复杂;PPTP VPN易于部署但会更改默认网关;SSL VPN既简单又安全,无需改动默认网关。

1:*swan

A:ipsec vpn的代表,默认端口tcp/udp 500
B:优点:加密强,对网络游戏什么的支持好(我们用不上)
C: 缺点:部署麻烦,配置麻烦,关键是他的nat-t,就是nat穿越功能需要打内核补丁,重新编译内核才行,这事在肉鸡做不得,呵呵。具体的可以看上面的那 个openswan的rar,讲的十分详细。大概的说说swan系列吧,最开始是freeswan,然后貌似在2004年停止开发了,衍生出 openswan和strongswan两个分支,我看了一下,貌似openswan发展的不错,strongswan连个rpm包都没,当然,那是貌 似。因为我不懂得code,说啥都得加貌似二字的,不过千万别小看scriptkid哦,因为你不知道什么时候他就在你的系统里用uid0在 script,虽然我还是多次被别人B4,呵呵。绕回来……swan系列分两块,一个是用户空间程序,一个是内核空间程序。用户空间程序叫p什么来o来 着,至于到底是p什么o,你装装就知道了,要不装,知道了也没啥意义。:)内核空间的包括模块和补丁,大概就那么回事。就是说,要做到nat-t,就需要用户空间程序,lkm和内核补丁,需要重新编译内核. 还有他要用root运行。
2:pptpd
A:pptp vpn的典型代表,默认端口tcp 1723
B:优点:windows带了他的client,安装也方便,就几个rpm,配置也不难
C:缺点:一拨进去他就会改缺省网关,很烦,要么拨进去自己route add/delete几下改改,一直别断开,看个网站犯得着那么麻烦吗
3:openvpn
A:SSL VPN的典型代表,默认端口tcp/udp 1194
B: 优点:简单好装,一个rpm搞定,要压缩的话多一个lzo的rpm包。配置也是简单的很,就生成一个static.key,还可以chroot,并且可以 以nobody运行,服务器的安全也是很重要的,保管不好就被抢了,不过chroot就没必要了,有兴趣的朋友可以自己搞搞:) ldd一下把要的东西都丢到一个地方然后加上配置文件就差不多了,再改改启动脚本。
还有就是拨进VPN之后,他不会改你默认网关,免去了折腾的烦恼,我们可以把sf.net的地址加到静态路由去。
在server那边只需要开一个udp or tcp端口就可以了,不怎么需要去动别人的iptables。
貌似好象还有负载均衡什么的,这个和我们的目的差距有点大了,ignore之。
C:缺点:除了要额外装一个client之外,相对我们的需求来说貌似没什么缺点了。

插播广告一条:新博客Putty

springboot配置javacvC:\Users\86150\.jdks\corretto-17.0.12\bin\java.exe -javaagent:C:\Users\86150\AppData\Local\JetBrains\IntelliJIdea2025.1\captureAgent\debugger-agent.jar=file:///C:/Users/86150/AppData/Local/Temp/capture137620569262658346.props -Dvisualvm.id=1138883519680900 -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\IDE\IntelliJ IDEA 2025.1\lib\idea_rt.jar=14028" -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Dfile.encoding=UTF-8 -classpath "C:\Users\86150\.m2\repository\org\junit\platform\junit-platform-launcher\1.12.2\junit-platform-launcher-1.12.2.jar;C:\Users\86150\.m2\repository\org\junit\platform\junit-platform-engine\1.12.2\junit-platform-engine-1.12.2.jar;C:\Users\86150\.m2\repository\org\opentest4j\opentest4j\1.3.0\opentest4j-1.3.0.jar;C:\Users\86150\.m2\repository\org\junit\platform\junit-platform-commons\1.12.2\junit-platform-commons-1.12.2.jar;C:\Users\86150\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;D:\IDE\IntelliJ IDEA 2025.1\lib\idea_rt.jar;D:\IDE\IntelliJ IDEA 2025.1\plugins\junit\lib\junit5-rt.jar;D:\IDE\IntelliJ IDEA 2025.1\plugins\junit\lib\junit-rt.jar;D:\BYSX\backend\downlink\target\test-classes;D:\BYSX\backend\downlink\target\classes;D:\maven-repository\org\springframework\boot\spring-boot-starter\3.5.4\spring-boot-starter-3.5.4.jar;D:\maven-repository\org\springframework\boot\spring-boot\3.5.4\spring-boot-3.5.4.jar;D:\maven-repository\org\springframework\spring-context\6.2.9\spring-context-6.2.9.jar;D:\maven-repository\org\springframework\spring-aop\6.2.9\spring-aop-6.2.9.jar;D:\maven-repository\org\springframework\spring-beans\6.2.9\spring-beans-6.2.9.jar;D:\maven-repository\org\springframework\spring-expression\6.2.9\spring-expression-6.2.9.jar;D:\maven-repository\io\micrometer\micrometer-observation\1.15.2\micrometer-observation-1.15.2.jar;D:\maven-repository\io\micrometer\micrometer-commons\1.15.2\micrometer-commons-1.15.2.jar;D:\maven-repository\org\springframework\boot\spring-boot-autoconfigure\3.5.4\spring-boot-autoconfigure-3.5.4.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-logging\3.5.4\spring-boot-starter-logging-3.5.4.jar;D:\maven-repository\ch\qos\logback\logback-classic\1.5.18\logback-classic-1.5.18.jar;D:\maven-repository\ch\qos\logback\logback-core\1.5.18\logback-core-1.5.18.jar;D:\maven-repository\org\apache\logging\log4j\log4j-to-slf4j\2.24.3\log4j-to-slf4j-2.24.3.jar;D:\maven-repository\org\apache\logging\log4j\log4j-api\2.24.3\log4j-api-2.24.3.jar;D:\maven-repository\org\slf4j\jul-to-slf4j\2.0.17\jul-to-slf4j-2.0.17.jar;D:\maven-repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;D:\maven-repository\org\springframework\spring-core\6.2.9\spring-core-6.2.9.jar;D:\maven-repository\org\springframework\spring-jcl\6.2.9\spring-jcl-6.2.9.jar;D:\maven-repository\org\yaml\snakeyaml\2.4\snakeyaml-2.4.jar;D:\maven-repository\net\devh\grpc-server-spring-boot-starter\2.15.0.RELEASE\grpc-server-spring-boot-starter-2.15.0.RELEASE.jar;D:\maven-repository\net\devh\grpc-server-spring-boot-autoconfigure\2.15.0.RELEASE\grpc-server-spring-boot-autoconfigure-2.15.0.RELEASE.jar;D:\maven-repository\net\devh\grpc-common-spring-boot\2.15.0.RELEASE\grpc-common-spring-boot-2.15.0.RELEASE.jar;D:\maven-repository\io\grpc\grpc-inprocess\1.58.0\grpc-inprocess-1.58.0.jar;D:\maven-repository\io\grpc\grpc-protobuf\1.58.0\grpc-protobuf-1.58.0.jar;D:\maven-repository\com\google\api\grpc\proto-google-common-protos\2.22.0\proto-google-common-protos-2.22.0.jar;D:\maven-repository\io\grpc\grpc-protobuf-lite\1.58.0\grpc-protobuf-lite-1.58.0.jar;D:\maven-repository\io\grpc\grpc-stub\1.58.0\grpc-stub-1.58.0.jar;D:\maven-repository\io\grpc\grpc-services\1.58.0\grpc-services-1.58.0.jar;D:\maven-repository\com\google\protobuf\protobuf-java-util\3.24.0\protobuf-java-util-3.24.0.jar;D:\maven-repository\io\grpc\grpc-api\1.58.0\grpc-api-1.58.0.jar;D:\maven-repository\net\devh\grpc-client-spring-boot-starter\2.15.0.RELEASE\grpc-client-spring-boot-starter-2.15.0.RELEASE.jar;D:\maven-repository\net\devh\grpc-client-spring-boot-autoconfigure\2.15.0.RELEASE\grpc-client-spring-boot-autoconfigure-2.15.0.RELEASE.jar;D:\maven-repository\io\grpc\grpc-netty-shaded\1.58.0\grpc-netty-shaded-1.58.0.jar;D:\maven-repository\com\google\guava\guava\32.0.1-android\guava-32.0.1-android.jar;D:\maven-repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;D:\maven-repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\maven-repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;D:\maven-repository\org\checkerframework\checker-qual\3.33.0\checker-qual-3.33.0.jar;D:\maven-repository\com\google\j2objc\j2objc-annotations\2.8\j2objc-annotations-2.8.jar;D:\maven-repository\com\google\errorprone\error_prone_annotations\2.20.0\error_prone_annotations-2.20.0.jar;D:\maven-repository\io\perfmark\perfmark-api\0.26.0\perfmark-api-0.26.0.jar;D:\maven-repository\io\grpc\grpc-core\1.58.0\grpc-core-1.58.0.jar;D:\maven-repository\com\google\code\gson\gson\2.13.1\gson-2.13.1.jar;D:\maven-repository\com\google\android\annotations\4.1.1.4\annotations-4.1.1.4.jar;D:\maven-repository\org\codehaus\mojo\animal-sniffer-annotations\1.23\animal-sniffer-annotations-1.23.jar;D:\maven-repository\io\grpc\grpc-context\1.58.0\grpc-context-1.58.0.jar;D:\maven-repository\io\grpc\grpc-util\1.58.0\grpc-util-1.58.0.jar;D:\maven-repository\com\google\protobuf\protobuf-java\4.28.2\protobuf-java-4.28.2.jar;D:\maven-repository\com\lmax\disruptor\3.4.4\disruptor-3.4.4.jar;D:\maven-repository\com\ctrip\framework\apollo\apollo-client\2.1.0\apollo-client-2.1.0.jar;D:\maven-repository\com\ctrip\framework\apollo\apollo-core\2.1.0\apollo-core-2.1.0.jar;D:\maven-repository\com\google\inject\guice\5.0.1\guice-5.0.1.jar;D:\maven-repository\javax\inject\javax.inject\1\javax.inject-1.jar;D:\maven-repository\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;D:\maven-repository\org\slf4j\slf4j-api\2.0.17\slf4j-api-2.0.17.jar;D:\maven-repository\org\bytedeco\javacv-platform\1.5.10\javacv-platform-1.5.10.jar;D:\maven-repository\org\bytedeco\javacv\1.5.10\javacv-1.5.10.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10.jar;D:\maven-repository\org\bytedeco\ffmpeg\6.1.1-1.5.10\ffmpeg-6.1.1-1.5.10.jar;D:\maven-repository\org\bytedeco\flycapture\2.13.3.31-1.5.9\flycapture-2.13.3.31-1.5.9.jar;D:\maven-repository\org\bytedeco\libdc1394\2.2.6-1.5.9\libdc1394-2.2.6-1.5.9.jar;D:\maven-repository\org\bytedeco\libfreenect\0.5.7-1.5.9\libfreenect-0.5.7-1.5.9.jar;D:\maven-repository\org\bytedeco\libfreenect2\0.2.0-1.5.9\libfreenect2-0.2.0-1.5.9.jar;D:\maven-repository\org\bytedeco\librealsense\1.12.4-1.5.9\librealsense-1.12.4-1.5.9.jar;D:\maven-repository\org\bytedeco\librealsense2\2.53.1-1.5.9\librealsense2-2.53.1-1.5.9.jar;D:\maven-repository\org\bytedeco\videoinput\0.200-1.5.9\videoinput-0.200-1.5.9.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9.jar;D:\maven-repository\org\bytedeco\leptonica\1.84.1-1.5.10\leptonica-1.84.1-1.5.10.jar;D:\maven-repository\org\bytedeco\tesseract\5.3.4-1.5.10\tesseract-5.3.4-1.5.10.jar;D:\maven-repository\org\openjfx\javafx-graphics\17\javafx-graphics-17.jar;D:\maven-repository\org\openjfx\javafx-graphics\17\javafx-graphics-17-win.jar;D:\maven-repository\org\openjfx\javafx-base\17\javafx-base-17.jar;D:\maven-repository\org\openjfx\javafx-base\17\javafx-base-17-win.jar;D:\maven-repository\org\bytedeco\javacpp-platform\1.5.10\javacpp-platform-1.5.10.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-android-arm64.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-android-x86_64.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-ios-arm64.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-ios-x86_64.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-linux-arm64.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-linux-ppc64le.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-linux-x86_64.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-macosx-arm64.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\javacpp\1.5.10\javacpp-1.5.10-windows-x86_64.jar;D:\maven-repository\org\bytedeco\openblas-platform\0.3.26-1.5.10\openblas-platform-0.3.26-1.5.10.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-android-arm64.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-android-x86_64.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-ios-arm64.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-ios-x86_64.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-linux-x86_64.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-linux-arm64.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-linux-ppc64le.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-macosx-arm64.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\openblas\0.3.26-1.5.10\openblas-0.3.26-1.5.10-windows-x86_64.jar;D:\maven-repository\org\bytedeco\opencv-platform\4.9.0-1.5.10\opencv-platform-4.9.0-1.5.10.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-android-arm64.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-android-x86_64.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-ios-arm64.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-ios-x86_64.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-linux-x86_64.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-linux-arm64.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-linux-ppc64le.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-macosx-arm64.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\opencv\4.9.0-1.5.10\opencv-4.9.0-1.5.10-windows-x86_64.jar;D:\maven-repository\org\bytedeco\ffmpeg-platform\6.1.1-1.5.10\ffmpeg-platform-6.1.1-1.5.10.jar;D:\maven-repository\org\bytedeco\ffmpeg\6.1.1-1.5.10\ffmpeg-6.1.1-1.5.10-android-arm64.jar;D:\maven-repository\org\bytedeco\ffmpeg\6.1.1-1.5.10\ffmpeg-6.1.1-1.5.10-android-x86_64.jar;D:\maven-repository\org\bytedeco\ffmpeg\6.1.1-1.5.10\ffmpeg-6.1.1-1.5.10-linux-x86_64.jar;D:\maven-repository\org\bytedeco\ffmpeg\6.1.1-1.5.10\ffmpeg-6.1.1-1.5.10-linux-arm64.jar;D:\maven-repository\org\bytedeco\ffmpeg\6.1.1-1.5.10\ffmpeg-6.1.1-1.5.10-linux-ppc64le.jar;D:\maven-repository\org\bytedeco\ffmpeg\6.1.1-1.5.10\ffmpeg-6.1.1-1.5.10-macosx-arm64.jar;D:\maven-repository\org\bytedeco\ffmpeg\6.1.1-1.5.10\ffmpeg-6.1.1-1.5.10-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\ffmpeg\6.1.1-1.5.10\ffmpeg-6.1.1-1.5.10-windows-x86_64.jar;D:\maven-repository\org\bytedeco\flycapture-platform\2.13.3.31-1.5.9\flycapture-platform-2.13.3.31-1.5.9.jar;D:\maven-repository\org\bytedeco\flycapture\2.13.3.31-1.5.9\flycapture-2.13.3.31-1.5.9-linux-x86.jar;D:\maven-repository\org\bytedeco\flycapture\2.13.3.31-1.5.9\flycapture-2.13.3.31-1.5.9-linux-x86_64.jar;D:\maven-repository\org\bytedeco\flycapture\2.13.3.31-1.5.9\flycapture-2.13.3.31-1.5.9-linux-armhf.jar;D:\maven-repository\org\bytedeco\flycapture\2.13.3.31-1.5.9\flycapture-2.13.3.31-1.5.9-linux-arm64.jar;D:\maven-repository\org\bytedeco\flycapture\2.13.3.31-1.5.9\flycapture-2.13.3.31-1.5.9-windows-x86.jar;D:\maven-repository\org\bytedeco\flycapture\2.13.3.31-1.5.9\flycapture-2.13.3.31-1.5.9-windows-x86_64.jar;D:\maven-repository\org\bytedeco\libdc1394-platform\2.2.6-1.5.9\libdc1394-platform-2.2.6-1.5.9.jar;D:\maven-repository\org\bytedeco\libdc1394\2.2.6-1.5.9\libdc1394-2.2.6-1.5.9-linux-x86.jar;D:\maven-repository\org\bytedeco\libdc1394\2.2.6-1.5.9\libdc1394-2.2.6-1.5.9-linux-x86_64.jar;D:\maven-repository\org\bytedeco\libdc1394\2.2.6-1.5.9\libdc1394-2.2.6-1.5.9-linux-armhf.jar;D:\maven-repository\org\bytedeco\libdc1394\2.2.6-1.5.9\libdc1394-2.2.6-1.5.9-linux-arm64.jar;D:\maven-repository\org\bytedeco\libdc1394\2.2.6-1.5.9\libdc1394-2.2.6-1.5.9-linux-ppc64le.jar;D:\maven-repository\org\bytedeco\libdc1394\2.2.6-1.5.9\libdc1394-2.2.6-1.5.9-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\libdc1394\2.2.6-1.5.9\libdc1394-2.2.6-1.5.9-windows-x86.jar;D:\maven-repository\org\bytedeco\libdc1394\2.2.6-1.5.9\libdc1394-2.2.6-1.5.9-windows-x86_64.jar;D:\maven-repository\org\bytedeco\libfreenect-platform\0.5.7-1.5.9\libfreenect-platform-0.5.7-1.5.9.jar;D:\maven-repository\org\bytedeco\libfreenect\0.5.7-1.5.9\libfreenect-0.5.7-1.5.9-linux-x86.jar;D:\maven-repository\org\bytedeco\libfreenect\0.5.7-1.5.9\libfreenect-0.5.7-1.5.9-linux-x86_64.jar;D:\maven-repository\org\bytedeco\libfreenect\0.5.7-1.5.9\libfreenect-0.5.7-1.5.9-linux-armhf.jar;D:\maven-repository\org\bytedeco\libfreenect\0.5.7-1.5.9\libfreenect-0.5.7-1.5.9-linux-arm64.jar;D:\maven-repository\org\bytedeco\libfreenect\0.5.7-1.5.9\libfreenect-0.5.7-1.5.9-linux-ppc64le.jar;D:\maven-repository\org\bytedeco\libfreenect\0.5.7-1.5.9\libfreenect-0.5.7-1.5.9-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\libfreenect\0.5.7-1.5.9\libfreenect-0.5.7-1.5.9-windows-x86.jar;D:\maven-repository\org\bytedeco\libfreenect\0.5.7-1.5.9\libfreenect-0.5.7-1.5.9-windows-x86_64.jar;D:\maven-repository\org\bytedeco\libfreenect2-platform\0.2.0-1.5.9\libfreenect2-platform-0.2.0-1.5.9.jar;D:\maven-repository\org\bytedeco\libfreenect2\0.2.0-1.5.9\libfreenect2-0.2.0-1.5.9-linux-x86.jar;D:\maven-repository\org\bytedeco\libfreenect2\0.2.0-1.5.9\libfreenect2-0.2.0-1.5.9-linux-x86_64.jar;D:\maven-repository\org\bytedeco\libfreenect2\0.2.0-1.5.9\libfreenect2-0.2.0-1.5.9-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\libfreenect2\0.2.0-1.5.9\libfreenect2-0.2.0-1.5.9-windows-x86_64.jar;D:\maven-repository\org\bytedeco\librealsense-platform\1.12.4-1.5.9\librealsense-platform-1.12.4-1.5.9.jar;D:\maven-repository\org\bytedeco\librealsense\1.12.4-1.5.9\librealsense-1.12.4-1.5.9-linux-armhf.jar;D:\maven-repository\org\bytedeco\librealsense\1.12.4-1.5.9\librealsense-1.12.4-1.5.9-linux-arm64.jar;D:\maven-repository\org\bytedeco\librealsense\1.12.4-1.5.9\librealsense-1.12.4-1.5.9-linux-x86.jar;D:\maven-repository\org\bytedeco\librealsense\1.12.4-1.5.9\librealsense-1.12.4-1.5.9-linux-x86_64.jar;D:\maven-repository\org\bytedeco\librealsense\1.12.4-1.5.9\librealsense-1.12.4-1.5.9-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\librealsense\1.12.4-1.5.9\librealsense-1.12.4-1.5.9-windows-x86.jar;D:\maven-repository\org\bytedeco\librealsense\1.12.4-1.5.9\librealsense-1.12.4-1.5.9-windows-x86_64.jar;D:\maven-repository\org\bytedeco\librealsense2-platform\2.53.1-1.5.9\librealsense2-platform-2.53.1-1.5.9.jar;D:\maven-repository\org\bytedeco\librealsense2\2.53.1-1.5.9\librealsense2-2.53.1-1.5.9-linux-armhf.jar;D:\maven-repository\org\bytedeco\librealsense2\2.53.1-1.5.9\librealsense2-2.53.1-1.5.9-linux-arm64.jar;D:\maven-repository\org\bytedeco\librealsense2\2.53.1-1.5.9\librealsense2-2.53.1-1.5.9-linux-x86.jar;D:\maven-repository\org\bytedeco\librealsense2\2.53.1-1.5.9\librealsense2-2.53.1-1.5.9-linux-x86_64.jar;D:\maven-repository\org\bytedeco\librealsense2\2.53.1-1.5.9\librealsense2-2.53.1-1.5.9-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\librealsense2\2.53.1-1.5.9\librealsense2-2.53.1-1.5.9-windows-x86.jar;D:\maven-repository\org\bytedeco\librealsense2\2.53.1-1.5.9\librealsense2-2.53.1-1.5.9-windows-x86_64.jar;D:\maven-repository\org\bytedeco\videoinput-platform\0.200-1.5.9\videoinput-platform-0.200-1.5.9.jar;D:\maven-repository\org\bytedeco\videoinput\0.200-1.5.9\videoinput-0.200-1.5.9-windows-x86.jar;D:\maven-repository\org\bytedeco\videoinput\0.200-1.5.9\videoinput-0.200-1.5.9-windows-x86_64.jar;D:\maven-repository\org\bytedeco\artoolkitplus-platform\2.3.1-1.5.9\artoolkitplus-platform-2.3.1-1.5.9.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-android-arm.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-android-arm64.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-android-x86.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-android-x86_64.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-linux-x86.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-linux-x86_64.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-linux-armhf.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-linux-arm64.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-linux-ppc64le.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-windows-x86.jar;D:\maven-repository\org\bytedeco\artoolkitplus\2.3.1-1.5.9\artoolkitplus-2.3.1-1.5.9-windows-x86_64.jar;D:\maven-repository\org\bytedeco\leptonica-platform\1.84.1-1.5.10\leptonica-platform-1.84.1-1.5.10.jar;D:\maven-repository\org\bytedeco\leptonica\1.84.1-1.5.10\leptonica-1.84.1-1.5.10-android-arm64.jar;D:\maven-repository\org\bytedeco\leptonica\1.84.1-1.5.10\leptonica-1.84.1-1.5.10-android-x86_64.jar;D:\maven-repository\org\bytedeco\leptonica\1.84.1-1.5.10\leptonica-1.84.1-1.5.10-linux-x86_64.jar;D:\maven-repository\org\bytedeco\leptonica\1.84.1-1.5.10\leptonica-1.84.1-1.5.10-linux-arm64.jar;D:\maven-repository\org\bytedeco\leptonica\1.84.1-1.5.10\leptonica-1.84.1-1.5.10-linux-ppc64le.jar;D:\maven-repository\org\bytedeco\leptonica\1.84.1-1.5.10\leptonica-1.84.1-1.5.10-macosx-arm64.jar;D:\maven-repository\org\bytedeco\leptonica\1.84.1-1.5.10\leptonica-1.84.1-1.5.10-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\leptonica\1.84.1-1.5.10\leptonica-1.84.1-1.5.10-windows-x86_64.jar;D:\maven-repository\org\bytedeco\tesseract-platform\5.3.4-1.5.10\tesseract-platform-5.3.4-1.5.10.jar;D:\maven-repository\org\bytedeco\tesseract\5.3.4-1.5.10\tesseract-5.3.4-1.5.10-android-arm64.jar;D:\maven-repository\org\bytedeco\tesseract\5.3.4-1.5.10\tesseract-5.3.4-1.5.10-android-x86_64.jar;D:\maven-repository\org\bytedeco\tesseract\5.3.4-1.5.10\tesseract-5.3.4-1.5.10-linux-x86_64.jar;D:\maven-repository\org\bytedeco\tesseract\5.3.4-1.5.10\tesseract-5.3.4-1.5.10-linux-arm64.jar;D:\maven-repository\org\bytedeco\tesseract\5.3.4-1.5.10\tesseract-5.3.4-1.5.10-linux-ppc64le.jar;D:\maven-repository\org\bytedeco\tesseract\5.3.4-1.5.10\tesseract-5.3.4-1.5.10-macosx-arm64.jar;D:\maven-repository\org\bytedeco\tesseract\5.3.4-1.5.10\tesseract-5.3.4-1.5.10-macosx-x86_64.jar;D:\maven-repository\org\bytedeco\tesseract\5.3.4-1.5.10\tesseract-5.3.4-1.5.10-windows-x86_64.jar;D:\maven-repository\org\springframework\boot\spring-boot-devtools\3.5.4\spring-boot-devtools-3.5.4.jar;D:\maven-repository\org\projectlombok\lombok\1.18.38\lombok-1.18.38.jar;D:\maven-repository\org\springframework\boot\spring-boot-starter-test\3.5.4\spring-boot-starter-test-3.5.4.jar;D:\maven-repository\org\springframework\boot\spring-boot-test\3.5.4\spring-boot-test-3.5.4.jar;D:\maven-repository\org\springframework\boot\spring-boot-test-autoconfigure\3.5.4\spring-boot-test-autoconfigure-3.5.4.jar;D:\maven-repository\com\jayway\jsonpath\json-path\2.9.0\json-path-2.9.0.jar;D:\maven-repository\jakarta\xml\bind\jakarta.xml.bind-api\4.0.2\jakarta.xml.bind-api-4.0.2.jar;D:\maven-repository\jakarta\activation\jakarta.activation-api\2.1.3\jakarta.activation-api-2.1.3.jar;D:\maven-repository\net\minidev\json-smart\2.5.2\json-smart-2.5.2.jar;D:\maven-repository\net\minidev\accessors-smart\2.5.2\accessors-smart-2.5.2.jar;D:\maven-repository\org\ow2\asm\asm\9.7.1\asm-9.7.1.jar;D:\maven-repository\org\assertj\assertj-core\3.27.3\assertj-core-3.27.3.jar;D:\maven-repository\net\bytebuddy\byte-buddy\1.17.6\byte-buddy-1.17.6.jar;D:\maven-repository\org\awaitility\awaitility\4.2.2\awaitility-4.2.2.jar;D:\maven-repository\org\hamcrest\hamcrest\3.0\hamcrest-3.0.jar;D:\maven-repository\org\junit\jupiter\junit-jupiter\5.12.2\junit-jupiter-5.12.2.jar;D:\maven-repository\org\junit\jupiter\junit-jupiter-api\5.12.2\junit-jupiter-api-5.12.2.jar;D:\maven-repository\org\opentest4j\opentest4j\1.3.0\opentest4j-1.3.0.jar;D:\maven-repository\org\junit\platform\junit-platform-commons\1.12.2\junit-platform-commons-1.12.2.jar;D:\maven-repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;D:\maven-repository\org\junit\jupiter\junit-jupiter-params\5.12.2\junit-jupiter-params-5.12.2.jar;D:\maven-repository\org\junit\jupiter\junit-jupiter-engine\5.12.2\junit-jupiter-engine-5.12.2.jar;D:\maven-repository\org\junit\platform\junit-platform-engine\1.12.2\junit-platform-engine-1.12.2.jar;D:\maven-repository\org\mockito\mockito-core\5.17.0\mockito-core-5.17.0.jar;D:\maven-repository\net\bytebuddy\byte-buddy-agent\1.17.6\byte-buddy-agent-1.17.6.jar;D:\maven-repository\org\objenesis\objenesis\3.3\objenesis-3.3.jar;D:\maven-repository\org\mockito\mockito-junit-jupiter\5.17.0\mockito-junit-jupiter-5.17.0.jar;D:\maven-repository\org\skyscreamer\jsonassert\1.5.3\jsonassert-1.5.3.jar;D:\maven-repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;D:\maven-repository\org\springframework\spring-test\6.2.9\spring-test-6.2.9.jar;D:\maven-repository\org\xmlunit\xmlunit-core\2.10.3\xmlunit-core-2.10.3.jar;D:\maven-repository\io\projectreactor\reactor-test\3.7.8\reactor-test-3.7.8.jar;D:\maven-repository\io\projectreactor\reactor-core\3.7.8\reactor-core-3.7.8.jar;D:\maven-repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 com.bysx.downlink.service.AudioServiceTest 14:47:43.393 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [com.bysx.downlink.service.AudioServiceTest]: AudioServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. 14:47:43.613 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration com.bysx.downlink.DownlinkApplication for test class com.bysx.downlink.service.AudioServiceTest 14:47:44.202 [main] INFO org.springframework.boot.devtools.restart.RestartApplicationListener -- Restart disabled due to context in which it is running . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.5.4) 2025-07-28T14:47:44.601+08:00 INFO 106828 --- [downlink] [ main] c.b.downlink.service.AudioServiceTest : Starting AudioServiceTest using Java 17.0.12 with PID 106828 (started by 86150 in D:\BYSX\backend\downlink) 2025-07-28T14:47:44.602+08:00 INFO 106828 --- [downlink] [ main] c.b.downlink.service.AudioServiceTest : No active profile set, falling back to 1 default profile: "default" 2025-07-28T14:47:45.396+08:00 INFO 106828 --- [downlink] [ main] g.s.a.GrpcServerFactoryAutoConfiguration : Detected grpc-netty-shaded: Creating ShadedNettyGrpcServerFactory 2025-07-28T14:47:45.716+08:00 INFO 106828 --- [downlink] [ main] n.d.b.g.s.s.AbstractGrpcServerFactory : Registered gRPC service: grpc.health.v1.Health, bean: grpcHealthService, class: io.grpc.protobuf.services.HealthServiceImpl 2025-07-28T14:47:45.717+08:00 INFO 106828 --- [downlink] [ main] n.d.b.g.s.s.AbstractGrpcServerFactory : Registered gRPC service: grpc.reflection.v1alpha.ServerReflection, bean: protoReflectionService, class: io.grpc.protobuf.services.ProtoReflectionService 2025-07-28T14:47:45.957+08:00 INFO 106828 --- [downlink] [ main] n.d.b.g.s.s.GrpcServerLifecycle : gRPC Server started, listening on address: *, port: 50051 2025-07-28T14:47:45.964+08:00 INFO 106828 --- [downlink] [ main] c.b.downlink.service.AudioServiceTest : Started AudioServiceTest in 1.779 seconds (process running for 3.783) OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffc86ba841d, pid=106828, tid=105524 # # JRE version: OpenJDK Runtime Environment Corretto-17.0.12.7.1 (17.0.12+7) (build 17.0.12+7-LTS) # Java VM: OpenJDK 64-Bit Server VM Corretto-17.0.12.7.1 (17.0.12+7-LTS, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64) # Problematic frame: # C 0x00007ffc86ba841d # # No core dump will be written. Minidumps are not enabled by default on client versions of Windows # # An error report file with more information is saved as: # D:\BYSX\backend\downlink\hs_err_pid106828.log # # If you would like to submit a bug report, please visit: # https://github.com/corretto/corretto-17/issues/ # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # Process finished with exit code 1 出现这个错误,怎么解决
07-29
在Spring Boot 3.5.4中集成JavaCV 1.5.10时,出现`EXCEPTION_ACCESS_VIOLATION`错误通常与Java Native Interface (JNI) 或 Java Native Library (JNL) 的内存访问问题相关。这类问题可能由以下几个原因导致: ### 原因分析 1. **JNI内存访问越界** JavaCV依赖于OpenCV和FFmpeg等本地库,这些库通过JNI与Java交互。如果本地代码访问了非法内存地址或释放了已经被回收的内存,就会导致访问冲突。 2. **JavaCV与JDK版本不兼容** Spring Boot 3.5.4通常与JDK 17及以上版本兼容,而JavaCV 1.5.10可能未完全适配JDK 17。某些JVM优化(如G1垃圾回收器)可能在处理本地资源时引发异常。 3. **本地库路径配置错误** JavaCV依赖的本地库(`.dll`、`.so`或`.dylib`)未正确加载,或路径未正确设置,可能导致加载失败并引发访问冲突。 4. **多线程访问本地资源** 如果多个线程同时操作JavaCV的本地资源(如`FFmpegFrameGrabber`或`Frame`对象),可能会引发并发访问问题。 --- ### 解决方案 #### 1. 升级JavaCV版本 JavaCV 1.5.10可能存在与JDK 17兼容性问题,建议升级到最新版本(如1.5.12或更高),以获得更好的兼容性和Bug修复。 ```xml <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.5.12</version> </dependency> ``` #### 2. 检查本地库加载 确保JavaCV所需的本地库正确加载。可以通过设置`java.library.path`参数指定本地库路径: ```bash java -Djava.library.path=/path/to/native/libs -jar your-application.jar ``` 也可以在代码中显式加载本地库: ```java Loader.load(opencv_core.class); ``` #### 3. 使用合适的JVM参数 在JVM启动参数中添加以下配置,有助于诊断和避免内存访问问题: ```bash -XX:+UnlockDiagnosticVMOptions -XX:+ShowHiddenFrames ``` 如果使用G1垃圾回收器,尝试切换为Parallel GC: ```bash -XX:+UseParallelGC ``` #### 4. 避免多线程并发访问本地资源 对JavaCV的本地资源访问进行同步控制,确保同一时间只有一个线程操作本地对象: ```java synchronized (grabber) { grabber.grab(); } ``` #### 5. 使用容器或沙箱隔离 将JavaCV相关操作封装到独立的进程中,通过RPC或Socket与主应用通信,避免本地库对主JVM的干扰。 --- ### 示例代码:加载JavaCV本地库 ```java import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.Frame; public class VideoProcessor { public void processVideo(String videoPath) throws Exception { FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(videoPath); grabber.start(); Frame frame; while ((frame = grabber.grab()) != null) { // 处理帧 } grabber.stop(); } public static void main(String[] args) { try { Loader.load(opencv_core.class); // 显式加载本地库 new VideoProcessor().processVideo("test.mp4"); } catch (Exception e) { e.printStackTrace(); } } } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值