一、背景

最近在写一个MQ框架-gmq,先写的服务端,然后写客户端。感觉服务端和客户端分成两个独立的项目不合适,于是改成了maven父子模块的形式。父项目相当于一个壳,里面包含服务端、客户端两个模块。

二、问题描述

1、当时服务端是单独一个项目的时候,启动是正常的。pom配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.shuimutong</groupId>
<artifactId>gmq-server</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>gmq</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<gmvc.version>1.0.1-SNAPSHOT</gmvc.version>
<gdao.version>2.0.0-SNAPSHOT</gdao.version>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>me.lovegao</groupId>
<artifactId>gdao</artifactId>
<version>${gdao.version}</version>
</dependency>
<dependency>
<groupId>com.shuimutong</groupId>
<artifactId>gmvc</artifactId>
<version>${gmvc.version}</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
<build>
<finalName>com.shuimutong.gmq_server</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
</configuration>
</plugin>
</plugins>
</build>

2、然后改成了父子模块的形式。

其中,父项目pom如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.shuimutong</groupId>
<artifactId>gmq</artifactId>
<version>${global.version}</version>
<packaging>pom</packaging>
<url>http://maven.apache.org</url> <modules>
<module>gmq-server</module>
<module>gmq-client</module>
</modules> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<global.version>0.0.1-SNAPSHOT</global.version>
<fastjson.version>1.2.60</fastjson.version>
<gdao.version>2.0.0-SNAPSHOT</gdao.version>
<gmvc.version>1.0.1-SNAPSHOT</gmvc.version>
<gutil.version>0.0.2-SNAPSHOT</gutil.version>
</properties> <dependencyManagement>
<dependencies>
<dependency>
<groupId>me.lovegao</groupId>
<artifactId>gdao</artifactId>
<version>${gdao.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.shuimutong</groupId>
<artifactId>gmvc</artifactId>
<version>${gmvc.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.shuimutong</groupId>
<artifactId>gutil</artifactId>
<version>${gutil.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
</configuration>
</plugin>
</plugins>
</build>
</project>

GMQ服务端pom如下:

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.shuimutong</groupId>
<artifactId>gmq</artifactId>
<version>${global.version}</version>
</parent>
<groupId>com.shuimutong</groupId>
<artifactId>gmq-server</artifactId>
<packaging>war</packaging>
<version>${global.version}</version>
<name>gmq-server</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>me.lovegao</groupId>
<artifactId>gdao</artifactId>
</dependency>
<dependency>
<groupId>com.shuimutong</groupId>
<artifactId>gmvc</artifactId>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
</dependencies>
<build>
<finalName>com.shuimutong.gmq_server</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
</configuration>
</plugin>
</plugins>
</build>
</project>

3、通过Eclipse部署到Tomcat启动,具体日志如下:

十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server.服务器版本: Apache Tomcat/9.0.14
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server.构建: Dec 6 2018 21:13:53 UTC
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server version number: 9.0.14.0
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Name: Windows 10
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS.版本: 10.0
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: 结.造: amd64
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Java 环境变量: D:\develop\jdk1.8.0_144\jre
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM 版本: 1.8.0_144-b01
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM.供应商: Oracle Corporation
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_BASE: E:\develop\work_space\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME: D:\develop\apache-tomcat-9.0.14
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=E:\develop\work_space\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:\develop\apache-tomcat-9.0.14
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dwtp.deploy=E:\develop\work_space\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=D:\develop\apache-tomcat-9.0.14\endorsed
十一月 10, 2019 10:43:30 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=UTF-8
十一月 10, 2019 10:43:30 上午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: Loaded APR based Apache Tomcat Native library [1.2.19] using APR version [1.6.5].
十一月 10, 2019 10:43:30 上午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
十一月 10, 2019 10:43:30 上午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
十一月 10, 2019 10:43:30 上午 org.apache.catalina.core.AprLifecycleListener initializeSSL
信息: OpenSSL successfully initialized [OpenSSL 1.1.1a 20 Nov 2018]
十一月 10, 2019 10:43:30 上午 org.apache.coyote.AbstractProtocol init
信息: 初始化协议处理器 ["http-nio-8080"]
十一月 10, 2019 10:43:31 上午 org.apache.coyote.AbstractProtocol init
信息: 初始化协议处理器 ["ajp-nio-8009"]
十一月 10, 2019 10:43:31 上午 org.apache.catalina.startup.Catalina load
信息: 服务器在[813]毫秒内初始化
十一月 10, 2019 10:43:31 上午 org.apache.catalina.core.StandardService startInternal
信息: Starting service [Catalina]
十一月 10, 2019 10:43:31 上午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet engine: [Apache Tomcat/9.0.14]
十一月 10, 2019 10:43:32 上午 org.apache.jasper.servlet.TldScanner scanJars
信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
十一月 10, 2019 10:43:34 上午 org.apache.jasper.servlet.TldScanner scanJars
信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
十一月 10, 2019 10:43:34 上午 org.apache.catalina.core.ApplicationContext log
信息: Marking servlet [gmvc] as unavailable
十一月 10, 2019 10:43:34 上午 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet [gmvc] in web application [/com.shuimutong.gmq_server] threw load() exception
java.lang.ClassNotFoundException: com.shuimutong.gmvc.handler.XDispatcherServlet
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1343)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1173)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:540)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:521)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1031)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:971)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4849)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5165)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1382)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1372)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:907)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1382)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1372)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:907)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:423)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:933)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:637)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492) 十一月 10, 2019 10:43:34 上午 org.apache.coyote.AbstractProtocol start
信息: 开始协议处理句柄["http-nio-8080"]
十一月 10, 2019 10:43:34 上午 org.apache.coyote.AbstractProtocol start
信息: 开始协议处理句柄["ajp-nio-8009"]
十一月 10, 2019 10:43:34 上午 org.apache.catalina.startup.Catalina start
信息: Server startup in [3,492] milliseconds
十一月 10, 2019 10:43:37 上午 org.apache.catalina.core.StandardServer await
信息: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
十一月 10, 2019 10:43:37 上午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-nio-8080"]
十一月 10, 2019 10:43:37 上午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-nio-8009"]
十一月 10, 2019 10:43:38 上午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service [Catalina]
十一月 10, 2019 10:43:38 上午 org.apache.coyote.AbstractProtocol stop
信息: Stopping ProtocolHandler ["http-nio-8080"]
十一月 10, 2019 10:43:38 上午 org.apache.coyote.AbstractProtocol stop
信息: Stopping ProtocolHandler ["ajp-nio-8009"]
十一月 10, 2019 10:43:38 上午 org.apache.coyote.AbstractProtocol destroy
信息: 正在摧毁协议处理器 ["http-nio-8080"]
十一月 10, 2019 10:43:38 上午 org.apache.coyote.AbstractProtocol destroy
信息: 正在摧毁协议处理器 ["ajp-nio-8009"]

简而言之,找不到gmvc的XDispatcherServlet类。(手写框架,写过的框架得用,所以就用了自己写的MVC框架)

反复install框架代码,无济于事。

某担心是gmvc框架的问题,于是部署了框架的测试代码,启动正常。

那么可以定位到,问题出在使用者身上。

三、解决问题之道

1、定位问题

想了又想,部署、重启了许多遍,无济于事。看网上有人说是Eclipse对maven支持不好,换IDEA,我差点换了。

看了好几遍项目结构,没有问题。

Marking servlet [gmvc] as unavailable

看着tomcat的启动日志,真想debug一下tomcat的代码,奈何做不到。

仔细想想,问题应该出在部署tomcat这个环节。

我打开部署项目到tomcat的路径:

E:\develop\work_space\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gmq-server

Eclipse的workspace里。。

看了项目的lib目录,只有一个jar:javax.servlet-api-3.1.0.jar

原来部署到tomcat里的时候,那些依赖的类没有部署过来。

2、解决问题

某百度了一下maven的scope,回想到以前项目里用provided,是因为其他模块已经包含了,打包时不需要再打入,我这里使用显然不合适。

我于是把父项目的scope全部去掉,但是依然不行。

最后看到了一篇文章(https://blog.csdn.net/u010295735/article/details/77504621),终于启动正常了。

文章整理的很到位,我这里就不再复述了,仅贴图一张,详情请参考原文。

----------------------下面是图----------------------

Tomcat启动找不到项目依赖jar的解决方式的更多相关文章

  1. Maven下载项目依赖jar包和使用方法

    一.Maven3.5.0安装与配置+Eclipse应用 参考:Maven3.5.0安装与配置+Eclipse应用 二.http://mvnrepository.com/ 此处以http://mvnre ...

  2. win10执行Tensorflow,总是会报错“DLL load failed: 找不到指定的模块”的解决方式----终极版方式

    win10上运行tensorflow时报错,“DLL load failed: 找不到指定的模块”的解决方式 我只想说,当你们遇到这个问题的时候,以下终极版的方式出来了,非常感谢知乎 leo lv ! ...

  3. jenkins构建maven项目:找不到本地依赖包的解决办法

    前言: 我们在构建maven项目时,常常会用到一些特殊的jar包(不能在中央仓库中直接下载到本地仓库如微软不允许以maven的方式直接下载com.microsoft.sqlserver:sqljdbc ...

  4. Maven 基础环境搭建 项目依赖jar包导入

    一.创建一个Maven工程 不清楚的话请查阅其它文档. 二.引入项目依赖的jar包 1.Spring 2.SpringMvc 3.Mybatis 4. 数据库连接池,驱动 5.其它(jstl.serv ...

  5. tomcat启动错误org.springframework.beans.factory.CannotLoadBeanClassException的解决

    tomcat启动时一直报这个错误,但是报错的类确实存在. 清空tomcat,更新maven项目,重配tomcat都没有解决. 最后解决办法: Eclipse环境:Project-->clean ...

  6. MVC3项目依赖文件错误解决

    MVC3的项目依赖分为两大类: 1.ASP.NET Web Pages 2.ASP.NET MVC 3 如果没有正确引入,或者项目的版本有错误会出现程序集引用错误. 在服务器上部署时,解决思路如下: ...

  7. tomcat启动报错java.lang.OutOfMemoryError:PermGen space解决办法

    tomcat启动错误提示: 严重: Error waiting for multi-thread deployment of WAR files to completejava.util.concur ...

  8. 【IntelliJ IDEA】tomcat启动,打印日志乱码问题 【最新解决方法请看最后附录】

    刚开始给idea上配置了一个tomcat,然后跟着http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/theme-settings.h ...

  9. Tomcat双击startup.bat闪退的原因及解决方式

    很久不碰Tomcat了,最近因为种种原因需要重新投入到Java Web的怀抱,所以又重新接触了Tomcat 我下载了tomcat的压缩包将其解压缩到某个位置,我这里是D盘下的tomcat文件夹中,但是 ...

随机推荐

  1. android x86 固件定制

    测试提了几个bug 1.系统语言默认设置成中文,否则时间控件显示的内容有问题 2.关闭10分钟不操作自动休眠功能 3.默认关闭虚拟键盘,目的在文本控件点击后,虚拟键盘就会在右下角显示出来,导致物理键盘 ...

  2. 连接ftp服务器 JDK 1.7

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  3. Python - Django - 扩展默认 auth 表

    models.py: from django.db import models from django.contrib.auth.models import AbstractUser class Us ...

  4. Unity2018安装

    1. 直接安装 2.  先安装Unity 2018.2.14f1 若有C:\ProgramData\Unity文件夹,删除这个文件夹下的所有文件 3. 解压 unity2018破解.zip 将最后一个 ...

  5. LeetCode_482. License Key Formatting

    482. License Key Formatting Easy You are given a license key represented as a string S which consist ...

  6. nginx过滤access_log中HEAD、OPTIONS请求记录

    网上很多教程说是这样做: if ($request_method = HEAD) { access_log off; } 试了之后是不行的,正确的做法如下: http { map $request_m ...

  7. Redis常用运维命令

    1.启动命令 按照我其他博客的按照方法,启动命令为/etc/init.d/redis_6379 start 2.查看内存统计信息 [root@bogon ~]# redis-cli > info ...

  8. linux安装jira

    JIRA配置本地MYSQL数据库 https://blog.csdn.net/coin_one/article/details/78376238 jira7.3.6 linux安装及破解 https: ...

  9. shell中 >/dev/null 2>&1是什么意思

    原文地址:http://juke.outofmemory.cn/entry/295292 我们经常能在 shell 脚本中发现 >/dev/null 2>&1 这样的语句.以前的我 ...

  10. linux 资源

    linux 资源查看 cpu 信息 通过/proc/cpuinfo 查看  # 总核数 = 物理CPU个数 X 每颗物理CPU的核数  # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 ...