1. 项目概述在麒麟操作系统上部署TongWeb应用服务器最近在国产化替代的浪潮下不少项目都要求将原有的应用从Windows或CentOS迁移到国产的麒麟操作系统上。我手头就有一个老项目需要把运行在Tomcat上的Web应用迁移到东方通的TongWeb应用服务器并且部署在银河麒麟V10操作系统上。整个过程踩了不少坑从环境准备、软件安装、配置调优到问题排查几乎把能遇到的问题都遇了一遍。今天就把这次完整的部署实战经验整理出来如果你也正在或即将进行类似的国产化环境迁移这篇内容应该能帮你省下大量摸索的时间。简单来说TongWeb是一款国产的Java EE应用服务器对标的是WebLogic、WebSphere这类商业中间件。而麒麟操作系统无论是桌面版的银河麒麟还是服务器版的中标麒麟都是基于Linux内核的国产操作系统。将两者结合是构建自主可控信息系统基础设施的常见技术栈。这次部署的目标就是在麒麟操作系统上成功安装TongWeb并确保一个典型的Java Web应用能够稳定运行。接下来我会从环境准备开始一步步拆解安装、配置、部署和问题解决的全过程。2. 环境准备与前置检查在开始安装TongWeb之前充分的准备工作是成功的一半。麒麟操作系统虽然源自Linux但在软件源、内核模块、硬件驱动等方面有其特殊性盲目操作很容易导致安装失败或后续运行异常。2.1 操作系统确认与基础环境配置首先必须明确你使用的是哪个版本的麒麟操作系统。通过执行cat /etc/os-release或uname -a命令可以查看系统详细信息。常见的版本有银河麒麟桌面版V10、中标麒麟服务器版V7/V10等。不同版本的内核、Glibc库版本可能不同这直接关系到TongWeb所依赖的Java环境是否兼容。注意务必记录下操作系统的具体版本号和架构如x86_64或aarch64。TongWeb的安装包和后续的JDK都需要与系统架构严格匹配。从网络热词可以看到阿里云的ARM架构麒麟系统aarch64就需要专门的软件包。接下来需要配置好系统的软件源。麒麟操作系统默认的软件源可能不全建议根据官方文档配置合适的yum或apt源确保能顺利安装后续所需的依赖包如unzip、telnet用于管理端口测试、net-tools等基础工具。# 示例检查系统信息 cat /etc/os-release uname -m # 查看系统架构 # 安装基础工具 sudo yum install -y unzip net-tools telnet wget # 适用于yum包管理器 # 或 sudo apt-get update sudo apt-get install -y unzip net-tools telnet wget # 适用于apt包管理器2.2 JDK环境准备与验证TongWeb是纯Java应用服务器因此一个正确安装且配置好的JDK是首要前提。强烈不建议使用麒麟系统自带的OpenJDK因为其版本和兼容性可能无法满足TongWeb的要求。通常需要从Oracle或适合国产环境的JDK提供商如龙芯、华为毕昇JDK等获取指定版本的JDK。JDK版本选择参考TongWeb官方文档的推荐版本。常见的要求是JDK 1.8或JDK 11。以JDK 1.8为例应下载对应操作系统架构的tar.gz包。安装与配置将JDK解压到特定目录如/usr/local/java/jdk1.8.0_301。然后配置环境变量。# 编辑/etc/profile文件 sudo vim /etc/profile # 在文件末尾添加 export JAVA_HOME/usr/local/java/jdk1.8.0_301 export JRE_HOME$JAVA_HOME/jre export CLASSPATH.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH$JAVA_HOME/bin:$PATH # 使配置生效 source /etc/profile验证安装执行java -version和javac -version确保输出的版本号正确并且JAVA_HOME环境变量指向无误。实操心得环境变量配置后最好新开一个终端窗口再次验证。我曾遇到过在当前终端source后生效但系统服务如以后将TongWeb配置为服务启动时读取不到正确JAVA_HOME的情况问题根源就在于环境变量没有全局生效。稳妥的做法是配置在/etc/profile.d/目录下创建一个独立的脚本文件。2.3 系统资源与权限规划安装前需要规划好TongWeb的安装目录、运行用户以及所需的系统资源。安装目录选择一个有足够磁盘空间建议至少20GB以上空闲空间的路径。例如/opt/tongweb。避免安装在/home目录下以免权限问题。运行用户切忌使用root用户直接运行TongWeb。应该创建一个专用的系统用户例如tongweb。sudo groupadd tongweb sudo useradd -g tongweb -s /bin/bash -d /home/tongweb tongweb sudo passwd tongweb # 设置密码资源限制对于生产环境可能需要调整tongweb用户的系统资源限制如最大文件打开数nofile和最大进程数nproc。可以通过编辑/etc/security/limits.conf文件实现。防火墙与SELinux提前规划好TongWeb需要监听的端口默认是9060管理端口和8080应用端口。如果系统防火墙firewalld或iptables开启需要放行这些端口。对于麒麟服务器系统SELinux也可能处于 enforcing 状态可以先将其设置为 permissive 模式以排除干扰待安装成功后再仔细配置安全策略。# 临时设置SELinux为permissive sudo setenforce 0 # 永久修改需编辑 /etc/selinux/config将SELINUXenforcing改为SELINUXpermissive并重启。3. TongWeb安装步骤详解完成环境准备后就可以开始安装TongWeb了。这里以常见的Linux版本安装包为例。3.1 获取与上传安装包从东方通官方渠道获取对应版本的TongWeb安装包。通常是一个以.bin结尾的可执行文件如Install_TW6.1.0.0_Enterprise_Linux.bin或一个.zip压缩包。将其上传到麒麟操作系统的临时目录例如/tmp。确保上传后的安装包具有可执行权限sudo chmod x /tmp/Install_TW6.1.0.0_Enterprise_Linux.bin3.2 执行静默安装推荐对于服务器环境图形化安装往往不可行静默安装是标准做法。这需要准备一个应答文件response file在安装过程中自动提供配置参数。创建应答文件在安装包同级目录下创建一个文本文件如installer.properties。内容示例如下# TongWeb安装应答文件 INSTALLER_UIsilent INSTALLER_LOCALEzh_CN USER_INSTALL_DIR/opt/tongweb/tw6.1 DEPLOY_TYPEfull CREATE_SHORTCUTfalse ACCEPT_LICENSE_AGREEMENTtrueUSER_INSTALL_DIR指定你的目标安装目录。DEPLOY_TYPE安装类型full为完全安装。ACCEPT_LICENSE_AGREEMENT必须为true表示接受许可协议。执行安装命令切换到安装包所在目录使用-f参数指定应答文件进行安装。cd /tmp sudo ./Install_TW6.1.0.0_Enterprise_Linux.bin -f installer.properties安装程序会在后台运行并将日志输出到当前目录或/tmp下的某个文件。可以通过tail -f命令跟踪日志。等待安装完成静默安装过程没有进度条需要耐心等待命令行提示符返回或者查看日志文件中出现“安装成功”字样。3.3 目录结构与权限修正安装完成后进入安装目录如/opt/tongweb/tw6.1查看生成的主要目录bin/启动、停止脚本所在目录。logs/服务器运行日志目录。conf/配置文件目录。webapps/应用部署目录。temp/,work/临时文件和JSP编译工作目录。关键一步将整个TongWeb安装目录的所有者更改为之前创建的tongweb用户。sudo chown -R tongweb:tongweb /opt/tongweb/tw6.1这一步至关重要确保后续以tongweb用户启动服务时有足够的权限写入日志、临时文件等。4. 核心配置与启动优化安装完成只是第一步合理的配置才能保证TongWeb稳定、高效地运行。4.1 内存与JVM参数配置TongWeb的性能很大程度上取决于JVM参数。配置文件位于/opt/tongweb/tw6.1/bin/startserver.sh或startserver.bat但这里是Linux。找到设置JAVA_OPTS或类似的行。对于生产环境一个基础的配置示例如下# 在startserver.sh中找到JAVA_OPTS设置修改为类似如下 JAVA_OPTS-server -Xms4096m -Xmx4096m -XX:MetaspaceSize256m -XX:MaxMetaspaceSize512m -Xmn1500m -XX:UseG1GC -XX:DisableExplicitGC -Dfile.encodingUTF-8-Xms和-Xmx设置JVM堆内存的初始大小和最大值。建议两者设为相同值避免运行期堆内存震荡带来的性能开销。具体大小根据服务器物理内存和应用需求来定一般建议为系统内存的1/4到1/2。-XX:MetaspaceSize和-XX:MaxMetaspaceSize元空间Java 8大小设置。-Xmn年轻代大小。G1收集器下此参数不敏感如果使用Parallel Scavenge收集器则需要关注。-XX:UseG1GC指定使用G1垃圾收集器在大多数场景下比传统的CMS表现更均衡。-Dfile.encodingUTF-8强制指定文件编码避免中文乱码问题。注意事项JVM参数调优是一个复杂的过程上述仅为通用起点。需要根据应用的实际内存使用模式可通过jstat -gcutil观察进行精细调整。盲目加大堆内存可能导致GC停顿时间过长。4.2 服务器核心配置调整主要配置文件是conf/server.xml。这里有几个关键点端口修改默认的8080和9060端口可能与现有服务冲突。可以在Service标签下的Connector元素中修改port属性。!-- 修改应用访问端口 -- Connector port8080 protocolHTTP/1.1 ... / !-- 修改管理控制台端口 -- Connector port9060 protocolAJP/1.3 ... redirectPort9443 /线程池配置在Executor或Connector中调整maxThreads最大工作线程数、minSpareThreads最小空闲线程数等参数以匹配应用的并发需求。URI编码确保Connector中设置了URIEncodingUTF-8这是解决GET请求中文乱码的标配。访问日志在conf/server.xml中配置访问日志Access Log的格式和输出位置便于后期排查问题。4.3 启动与停止脚本封装虽然安装目录下有startserver.sh和stopserver.sh但为了管理方便我们通常将其封装成系统服务。创建启动脚本以tongweb用户身份创建一个简化的启动脚本/home/tongweb/start_tw.sh。#!/bin/bash export JAVA_HOME/usr/local/java/jdk1.8.0_301 export PATH$JAVA_HOME/bin:$PATH cd /opt/tongweb/tw6.1/bin ./startserver.sh并赋予执行权限chmod x /home/tongweb/start_tw.sh。配置为Systemd服务推荐对于麒麟V10等使用systemd的系统可以创建服务单元文件。sudo vim /etc/systemd/system/tongweb.service内容如下[Unit] DescriptionTongWeb Application Server Afternetwork.target [Service] Typeforking Usertongweb Grouptongweb EnvironmentJAVA_HOME/usr/local/java/jdk1.8.0_301 EnvironmentPATH$JAVA_HOME/bin:$PATH WorkingDirectory/opt/tongweb/tw6.1/bin ExecStart/opt/tongweb/tw6.1/bin/startserver.sh ExecStop/opt/tongweb/tw6.1/bin/stopserver.sh Restarton-failure RestartSec10 [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl enable tongweb.service # 设置开机自启 sudo systemctl start tongweb.service # 启动服务 sudo systemctl status tongweb.service # 查看状态这种方式可以实现服务的优雅启动、停止、状态监控和自动重启是生产环境的最佳实践。5. 应用部署与基础验证服务启动后可以通过ps -ef | grep java查看进程是否存在并通过netstat -tlnp | grep java确认监听端口如8080, 9060是否已打开。访问管理控制台在浏览器中输入http://服务器IP:9060/console。默认用户名和密码通常是admin/admin。首次登录会要求修改密码。成功登录控制台是TongWeb安装成功的最直观标志。部署测试应用将你的Web应用WAR包上传到webapps/目录下TongWeb会自动解压部署。或者通过管理控制台的“应用部署”功能进行部署。访问应用在浏览器中输入http://服务器IP:8080/你的应用上下文路径验证应用是否能正常访问。6. 高频问题排查与解决实录在实际部署中几乎不可能一帆风顺。下面是我遇到和收集的几个典型问题及解决方法。6.1 启动失败java.lang.NoClassDefFoundError或ClassNotFoundException这是最常见的问题之一尤其是类似网络热词中提到的java.lang.NoClassDefFoundError: java/util/logging/LogRecord。原因分析根本原因是类加载器找不到指定的类。可能的原因有JDK版本不兼容或损坏TongWeb需要的某个类在当前JDK中不存在或版本不对。应用依赖冲突你的Web应用自带的JAR包与TongWeb或JDK中的库发生了冲突。TongWeb自身库文件缺失安装不完整或某些JAR包损坏。解决步骤首先检查JDK确认java -version输出的是官方推荐版本。尝试将TongWeb的bin/setclasspath.sh或类似脚本中显式指定的JAVA_HOME指向一个全新的、干净的JDK安装。检查应用依赖如果错误是在部署特定应用后出现的尝试将应用WEB-INF/lib下的JAR包逐一移除特别是日志相关的jar如log4j,slf4j,logback看是否解决问题。这常常是第三方包与中间件内置日志框架冲突导致。检查TongWeb的lib目录对比正常环境的/opt/tongweb/tw6.1/lib目录看是否有明显的JAR包缺失。可以尝试从安装包中重新解压覆盖。6.2 管理控制台无法访问端口9060无响应原因分析防火墙未放行麒麟系统的防火墙firewalld可能阻止了9060端口。SELinux限制SELinux策略禁止了httpdTongWeb进程监听非标准端口。TongWeb服务未成功启动检查日志logs/catalina.out或logs/startup.log看是否有启动错误。IP绑定问题server.xml中Connector可能只绑定了127.0.0.1需要改为0.0.0.0。解决步骤检查端口监听sudo netstat -tlnp | grep 9060。如果无输出说明服务没起来或没监听。检查防火墙sudo firewall-cmd --list-all。查看ports项是否包含9060/tcp。如果没有添加并重载sudo firewall-cmd --add-port9060/tcp --permanent sudo firewall-cmd --reload。临时禁用SELinux排查sudo setenforce 0然后尝试访问。如果成功说明是SELinux问题需要配置相应的策略模块而非永久关闭。检查server.xml配置确认Connector port9060 ... address0.0.0.0 /。6.3 应用部署后中文乱码原因分析GET请求参数、POST请求体、文件上传名称、数据库连接、JSP页面编码等多个环节的编码不一致。系统性解决方案TongWeb容器级确保conf/server.xml中所有Connector都设置了URIEncodingUTF-8和useBodyEncodingForURItrue。应用级在应用的web.xml中添加全局字符编码过滤器CharacterEncodingFilter。JSP页面级每个JSP页面头部添加% page contentTypetext/html; charsetUTF-8 pageEncodingUTF-8%。数据库连接级在JDBC连接URL中指定字符集如jdbc:mysql://...?useUnicodetruecharacterEncodingUTF-8。操作系统级确保麒麟系统的默认语言环境locale支持UTF-8。可以通过locale命令查看。6.4 性能问题内存持续增长或CPU占用过高排查工具首先使用top命令查看进程的CPU和内存占用。然后使用JDK自带工具进行深入分析。内存泄漏排查jps -l列出Java进程PID。jmap -heap pid查看堆内存概要。jmap -histo:live pid | head -20查看存活对象实例数排查是否有某个类异常增多。生成堆转储文件进行离线分析jmap -dump:live,formatb,fileheap.hprof pid然后用Eclipse MAT或VisualVM分析。CPU高占用排查top -Hp pid查看该Java进程内各个线程的CPU占用。将占用最高的线程PID转换为16进制printf %x\n 线程PID。jstack pid jstack.log打印线程栈。在jstack.log中搜索刚才转换的16进制线程ID找到对应的线程栈信息即可定位正在执行的代码。6.5 麒麟系统特定问题驱动与显示从网络热词看有用户遇到“麒麟v10操作系统不能调分辨率”或打印机驱动问题。这些问题虽然不直接关系TongWeb但会影响服务器管理员的体验。分辨率问题通常出现在虚拟机如VMware安装的麒麟桌面版。需要确保已安装VMware Tools或VirtualBox Guest Additions并安装了正确的显卡驱动。打印机驱动如“奔图m6556打印驱动”需要前往打印机厂商官网或麒麟系统自带的“软件商店”查找并安装对应的国产操作系统驱动。网络助手工具麒麟系统自带的网络配置工具如果遇到问题可以尝试直接使用命令行nmcli或编辑网络配置文件/etc/sysconfig/network-scripts/ifcfg-eth0可能因版本而异进行配置。7. 安全加固与生产环境建议将TongWeb投入生产环境前必须进行安全加固。修改默认密码首次登录管理控制台后立即修改默认的admin密码并创建具有不同权限的管理员账户遵循最小权限原则。禁用不必要的应用和管理接口移除webapps目录下自带的、不用的示例应用如docs, examples等。如果不需要远程管理可以考虑限制管理控制台9060端口的访问IP。定期更新与漏洞扫描关注东方通官方发布的补丁及时更新TongWeb版本。对于网络热词中提到的“tongweb ejb反序列化漏洞扫描器可以发现嘛”这类问题答案是肯定的。应定期使用专业的漏洞扫描工具如Nessus, OpenVAS或代码审计工具对部署的应用和中间件进行扫描及时发现类似反序列化、SQL注入等安全漏洞。日志审计与监控配置日志轮转避免日志文件无限增大占满磁盘。将logs目录下的访问日志、应用日志接入统一的日志分析平台如ELK便于审计和故障排查。同时监控TongWeb进程的存活状态、JVM内存使用率、GC情况、线程池活跃度等关键指标。备份关键配置定期备份conf目录下的所有配置文件、以及应用的数据和代码。