四十六、Linux性能优化实战学习笔记| 案例篇:为什么应用容器化后,启动慢了很多?
目录
案例准备
案例分析
启动服务
访问服务
查看日志
查询容器的状态
操作系统层面查看OOM
重启容器并查看java堆内存大小
如何解决?
启动tomcat需要21s正常吗?
top查看性能
pidstat查看具体进程
小结
随着 Kubernetes、Docker 等技术的普及,越来越多的企业,都已经走上了应用程序容器化的道路。我相信,你在了解学习这些技术的同时,一定也听说过不少,基于 Docker 的微服务架构带来的各种优势,比如:
-
使用 Docker ,把应用程序以及相关依赖打包到镜像中后,部署和升级更快捷;
-
把传统的单体应用拆分成多个更小的微服务应用后,每个微服务的功能都更简单,并且可以单独管理和维护;
-
每个微服务都可以根据需求横向扩展。即使发生故障,也只是局部服务不可用,而不像以前那样,导致整个服务不可用。
不过,任何技术都不是银弹。这些新技术,在带来诸多便捷功能之外,也带来了更高的复杂性,比如性能降低、架构复杂、排错困难等等。
今天,我就通过一个 Tomcat 案例,带你一起学习,如何分析应用程序容器化后的性能问题。
案例准备
vagrant 拉起的虚拟机
-
机器配置:1 CPU,2GB 内存。
-
预先安装 docker、curl、jq、pidstat 等工具
其中,jq 工具专门用来在命令行中处理 json。为了更好的展示 json 数据,我们用这个工具,来格式化 json 输出。
案例分析
我们今天要分析的案例,是一个 Tomcat 应用。Tomcat 是 Apache 基金会旗下,Jakarta 项目开发的轻量级应用服务器,它基于 Java 语言开发。Docker 社区也维护着 Tomcat 的官方镜像,你可以直接使用这个镜像,来启动一个 Tomcat 应用。
我们的案例,也基于 Tomcat 的官方镜像构建,其核心逻辑很简单,就是分配一点儿内存,并输出 “Hello, world!”。
<%
byte data[] = new byte[256*1024*1024];
out.println("Hello, wolrd!");
%>
启动服务
[root@hadoop100 /opt]#docker run --name tomcat --cpus 0.1 -m 128M -p 8080:8080 -itd feisky/tomcat:8
c3064a28fdf8e1606b2e5ceb84b0808d547fe274ce87cbd2781c844cdd0de9aa
根据服务器配置调整cgroup分配的内存。
访问服务
观察一会儿,可以看到,一段时间后,curl 终于给出了我们想要的结果 “Hello, wolrd!”。但是,随后又出现了 “Empty reply from server” ,和一直持续的 “Connection refused” 错误。换句话说,Tomcat 响应一次请求后,就再也不响应了。
/opt]#for ((i=1; i<=30; i++));do curl 192.168.56.10:8080; sleep 1s; done
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (52) Empty reply from server
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
curl: (7) Failed connect to 192.168.56.10:8080; Connection refused
查看日志
docker logs
[root@hadoop100 ~]#docker logs -f tomcat
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /docker-java-home/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
10-Feb-2022 08:59:37.189 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.38
10-Feb-2022 08:59:37.381 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Feb 5 2019 11:42:42 UTC
10-Feb-2022 08:59:37.382 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.38.0
10-Feb-2022 08:59:37.382 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
10-Feb-2022 08:59:37.382 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 3.10.0-1160.36.2.el7.x86_64
10-Feb-2022 08:59:37.382 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
10-Feb-2022 08:59:37.382 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-8-openjdk-amd64/jre
10-Feb-2022 08:59:37.382 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_181-8u181-b13-2~deb9u1-b13
10-Feb-2022 08:59:37.382 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
10-Feb-2022 08:59:37.382 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
10-Feb-2022 08:59:37.383 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
10-Feb-2022 08:59:37.383 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
10-Feb-2022 08:59:37.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
10-Feb-2022 08:59:37.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
10-Feb-2022 08:59:37.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
10-Feb-2022 08:59:37.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
10-Feb-2022 08:59:37.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
10-Feb-2022 08:59:37.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
10-Feb-2022 08:59:37.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
10-Feb-2022 08:59:37.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
10-Feb-2022 08:59:37.481 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.21] using APR version [1.5.2].
10-Feb-2022 08:59:37.482 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
10-Feb-2022 08:59:37.482 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
10-Feb-2022 08:59:37.581 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.0j 20 Nov 2018]
10-Feb-2022 08:59:39.987 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
10-Feb-2022 08:59:40.487 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
10-Feb-2022 08:59:40.984 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
10-Feb-2022 08:59:41.085 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
10-Feb-2022 08:59:41.180 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 25094 ms
10-Feb-2022 08:59:41.588 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
10-Feb-2022 08:59:41.588 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.38
10-Feb-2022 08:59:42.384 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/ROOT]
10-Feb-2022 08:59:51.287 WARNING [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [206] milliseconds.
10-Feb-2022 08:59:51.684 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/ROOT] has finished in [9,300] ms
10-Feb-2022 08:59:51.684 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/docs]
10-Feb-2022 08:59:52.185 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [501] ms
10-Feb-2022 08:59:52.185 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/examples]
10-Feb-2022 09:00:00.085 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/examples] has finished in [7,900] ms
10-Feb-2022 09:00:00.085 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/host-manager]
10-Feb-2022 09:00:00.684 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/host-manager] has finished in [598] ms
10-Feb-2022 09:00:00.684 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/manager]
10-Feb-2022 09:00:01.487 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [803] ms
10-Feb-2022 09:00:01.687 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
10-Feb-2022 09:00:01.988 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
10-Feb-2022 09:00:02.283 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 21102 ms
从内容上可以看到,Tomcat 在启动 21s 后完成初始化,并且正常启动。从日志上来看,没有什么问题。
不过,细心的你肯定注意到了最后一行,明显是回到了 Linux 的 SHELL 终端中,而没有继续等待 Docker 输出的容器日志。
输出重新回到 SHELL 终端,通常表示上一个命令已经结束。而我们的上一个命令,是 docker logs -f 命令。那么,它的退出就只有两种可能了,要么是容器退出了,要么就是 dockerd 进程退出了。
究竟是哪种情况呢?这就需要我们进一步确认了。我们可以在终端一中,执行下面的命令,查看容器的状态:
[root@hadoop100 /opt]#docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3064a28fdf8 feisky/tomcat:8 "catalina.sh run" 8 minutes ago Exited (137) 7 minutes ago tomcat
查询容器的状态
你会看到,容器处于 Exited 状态,说明是第一种情况,容器已经退出。不过为什么会这样呢?显然,在前面容器的日志里,我们并没有发现线索,那就只能从 Docker 本身入手了。
[root@hadoop100 /opt]#docker inspect tomcat -f '{{json .State}}' | jq
{"Status": "exited","Running": false,"Paused": false,"Restarting": false,"OOMKilled": true,"Dead": false,"Pid": 0,"ExitCode": 137,"Error": "","StartedAt": "2022-02-10T08:59:12.485543342Z","FinishedAt": "2022-02-10T09:00:27.213292165Z"
}
这次你可以看到,容器已经处于 exited 状态,OOMKilled 是 true,ExitCode 是 137。这其中,OOMKilled 表示容器被 OOM 杀死了。
我们前面提到过,OOM 表示内存不足时,某些应用会被系统杀死。可是,为什么内存会不足呢?我们的应用分配了 256 MB 的内存,而容器启动时,明明通过 -m 选项,设置了 512 MB 的内存,按说应该是足够的。
操作系统层面查看OOM
当 OOM 发生时,系统会把相关的 OOM 信息,记录到日志中。所以,接下来,我们可以在终端中执行 dmesg 命令,查看系统日志,并定位 OOM 相关的日志:
[1136990.229993] java invoked oom-killer: gfp_mask=0xd0, order=0, oom_score_adj=0
[1136990.237893] java cpuset=c3064a28fdf8e1606b2e5ceb84b0808d547fe274ce87cbd2781c844cdd0de9aa mems_allowed=0
[1136990.245070] CPU: 0 PID: 9817 Comm: java Tainted: G W OE ------------ T 3.10.0-1160.36.2.el7.x86_64 #1
[1136990.255217] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[1136990.257927] Call Trace:
[1136990.259424] [<ffffffff85583559>] dump_stack+0x19/0x1b
[1136990.260871] [<ffffffff8557e5f8>] dump_header+0x90/0x229
[1136990.262437] [<ffffffff8509d968>] ? ep_poll_callback+0xf8/0x220
[1136990.264049] [<ffffffff84fc1fc6>] ? find_lock_task_mm+0x56/0xc0
[1136990.265534] [<ffffffff8503d288>] ? try_get_mem_cgroup_from_mm+0x28/0x60
[1136990.268505] [<ffffffff84fc252d>] oom_kill_process+0x2cd/0x490
[1136990.270999] [<ffffffff8510f25c>] ? selinux_capable+0x1c/0x40
[1136990.272588] [<ffffffff8504167c>] mem_cgroup_oom_synchronize+0x55c/0x590
[1136990.274919] [<ffffffff85040ae0>] ? mem_cgroup_charge_common+0xc0/0xc0
[1136990.277221] [<ffffffff84fc2e14>] pagefault_out_of_memory+0x14/0x90
[1136990.278936] [<ffffffff8557cb35>] mm_fault_error+0x6a/0x157
[1136990.282209] [<ffffffff855908d1>] __do_page_fault+0x491/0x500
[1136990.286043] [<ffffffff85590975>] do_page_fault+0x35/0x90
[1136990.287597] [<ffffffff8558cac9>] ? error_swapgs+0xaa/0xc0
[1136990.289074] [<ffffffff8558c778>] page_fault+0x28/0x30
[1136990.290658] Task in /docker/c3064a28fdf8e1606b2e5ceb84b0808d547fe274ce87cbd2781c844cdd0de9aa killed as a result of limit of /docker/c3064a28fdf8e1606b2e5ceb84b0808d547fe274ce87cbd2781c844cdd0de9aa
[1136990.295345] memory: usage 131004kB, limit 131072kB, failcnt 24049
[1136990.299530] memory+swap: usage 262144kB, limit 262144kB, failcnt 9
[1136990.301239] kmem: usage 0kB, limit 9007199254740988kB, failcnt 0
[1136990.302828] Memory cgroup stats for /docker/c3064a28fdf8e1606b2e5ceb84b0808d547fe274ce87cbd2781c844cdd0de9aa: cache:16KB rss:130992KB rss_huge:0KB mapped_file:4KB swap:131136KB inactive_anon:65548KB active_anon:65444KB inactive_file:12KB active_file:4KB unevictable:0KB
[1136990.541127] [ pid ] uid tgid total_vm rss nr_ptes swapents oom_score_adj name
[1136990.542939] [ 9380] 0 9380 623636 35397 205 33151 0 java
[1136990.544756] Memory cgroup out of memory: Kill process 9842 (java) score 1049 or sacrifice child
[1136990.546634] Killed process 9380 (java), UID 0, total-vm:2494544kB, anon-rss:126448kB, file-rss:15140kB, shmem-rss:0kB
[1136991.835588] docker0: port 1(veth574ca5f) entered disabled state
[1136991.847573] docker0: port 1(veth574ca5f) entered disabled state
[1136991.849892] device veth574ca5f left promiscuous mode
[1136991.850558] docker0: port 1(veth574ca5f) entered disabled state
从 dmesg 的输出,你就可以看到很详细的 OOM 记录了。你应该可以看到下面几个关键点。
-
第一,被杀死的是一个 java 进程。从内核调用栈上的 mem_cgroup_out_of_memory 可以看出,它是因为超过 cgroup 的内存限制,而被 OOM 杀死的。
-
第二,java 进程是在容器内运行的,而容器内存的使用量和限制都是 512M(524288kB)。目前使用量已经达到了限制,所以会导致 OOM。
2494544kB, anon-rss:126448kB, file-rss:15140kB,
-
第三,被杀死的进程,PID 为 9380,
-
虚拟内存为 2.37G(total-vm:2494544kB)
-
匿名内存为 123M(anon-rss:126448kB)
-
页内存为 14M(15140kB)
-
换句话说,匿名内存是主要的内存占用。而且,匿名内存加上页内存,总共是 137M,已经超过了 128M 的限制。
综合这几点,可以看出,Tomcat 容器的内存主要用在了匿名内存中,而匿名内存,其实就是主动申请分配的堆内存。
重启容器并查看java堆内存大小
为什么 Tomcat 会申请这么多的堆内存呢?要知道,Tomcat 是基于 Java 开发的,所以应该不难想到,这很可能是 JVM 堆内存配置的问题。
我们知道,JVM 根据系统的内存总量,来自动管理堆内存,不明确配置的话,堆内存的默认限制是物理内存的四分之一。
不过,前面我们已经限制了容器内存为 512 M,java 的堆内存到底是多少呢?
我们继续在终端中,执行下面的命令,重新启动 tomcat 容器,并调用 java 命令行来查看堆内存大小:
[root@hadoop100 /opt]#docker run --name tomcat --cpus 0.1 -m 128M -p 8080:8080 -itd feisky/tomcat:8
e5f74747154af6186c4913a8df55a319d8db3111ecc5c29792fb013621833288
You have mail in /var/spool/mail/root
[root@hadoop100 /opt]#
[root@hadoop100 /opt]#
[root@hadoop100 /opt]#docker exec tomcat java -XX:+PrintFlagsFinal -version | grep HeapSizeuintx ErgoHeapSizeLimit = 0 {product}uintx HeapSizePerGCThread = 87241520 {product}uintx InitialHeapSize := 31457280 {product}uintx LargePageHeapSizeThreshold = 134217728 {product}uintx MaxHeapSize := 482344960 {product}
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
查看堆内存,注意单位是字节
你可以看到,初始堆内存的大小(InitialHeapSize)是 30MB,而最大堆内存则是 460MB,这可比容器限制的 128 MB 大多了。
之所以会这么大,其实是因为,容器内部看不到 Docker 为它设置的内存限制。虽然在启动容器时,我们通过 -m 128M 选项,给容器设置了 128M 的内存限制。
但实际上,从容器内部看到的限制,却并不是 128M。
这个最大堆内存460MB咋来的呢?
刚好 堆内存的默认限制是物理内存的四分之一。
如何解决?
通过环境变量 JAVA_OPTS=’-Xmx128m -Xms128m’ ,把 JVM 的初始内存和最大内存都设为 128MB:
$ docker run --name tomcat --cpus 0.1 -m 512M -e JAVA_OPTS='-Xmx128m -Xms128m' -p 8080:8080 -itd feisky/tomcat:8
启动tomcat需要21s正常吗?
启动过程,居然需要 22 秒,这也太慢了吧。
由于这个时间是花在容器启动上的,要排查这个问题,我们就要重启容器,并借助性能分析工具来分析容器进程。至于工具的选用,回顾一下我们前面的案例,我觉得可以先用 top 看看。
我们切换到终端二中,运行 top 命令;然后再切换到终端一,执行下面的命令,重启容器:
[root@hadoop100 /opt]#docker rm -f tomcat
tomcat
[root@hadoop100 /opt]#
[root@hadoop100 /opt]#
[root@hadoop100 /opt]#docker run --name tomcat --cpus 0.1 -m 512M -e JAVA_OPTS='-Xmx512m -Xms512m' -p 8080:8080 -itd feisky/tomcat:8
top查看性能
看不出有啥问题。
pidstat查看具体进程
pidstat -t -p 8372 1
如果你观察不到这些指标可以使用docker 命令获取java进程。作为变量传递给pidstat
# 删除旧容器
$ docker rm -f tomcat
# 运行新容器
$ docker run --name tomcat --cpus 0.1 -m 512M -e JAVA_OPTS='-Xmx512m -Xms512m' -p 8080:8080 -itd feisky/tomcat:8
# 查询新容器中进程的 Pid
$ PID=$(docker inspect tomcat -f '{{.State.Pid}}')
# 执行 pidstat
$ pidstat -t -p $PID 1
仔细观察这次的输出,你会发现,虽然 CPU 使用率(%CPU)很低,但等待运行的使用率(%wait)却非常高,最高甚至已经达到了 97%。这说明,这些线程大部分时间都在等待调度,而不是真正的运行。
注:如果你看不到 %wait 指标,请先升级 sysstat 后再试试。
为什么 CPU 使用率这么低,线程的大部分时间还要等待 CPU 呢?由于这个现象因 Docker 而起,自然的,你应该想到,这可能是因为 Docker 为容器设置了限制。
再回顾一下,案例开始时容器的启动命令。我们用 --cpus 0.1 ,为容器设置了 0.1 个 CPU 的限制,也就是 10% 的 CPU。这里也就可以解释,为什么 java 进程只有 10% 的 CPU 使用率,也会大部分时间都在等待了。
找出原因,最后的优化也就简单了,把 CPU 限制增大就可以了。比如,你可以执行下面的命令,将 CPU 限制增大到 1 ;然后再重启,并观察启动日志:
/opt]#docker run --name tomcat --cpus 1 -m 512M -e JAVA_OPTS='-Xmx512m -Xms512m' -p 8080:8080 -itd feisky/tomcat:8
现在可以看到,Tomcat 的启动过程,只需要 2 秒就完成了,果然比前面的 22 秒快多了 。
虽然我们通过增大 CPU 的限制,解决了这个问题。不过再碰到类似问题,你可能会觉得这种方法太麻烦了。因为要设置容器的资源限制,还需要我们预先评估应用程序的性能。显然还有更简单的方法,比如说直接去掉限制,让容器跑就是了。
不过,这种简单方法,却很可能带来更严重的问题。没有资源限制,就意味着容器可以占用整个系统的资源。这样,一旦任何应用程序发生异常,都有可能拖垮整台机器。
实际上,这也是在各大容器平台上最常见的一个问题。一开始图省事不设限,但当容器数量增长上来的时候,就会经常出现各种异常问题。最终查下来,可能就是因为某个应用资源使用过高,导致整台机器短期内无法响应。只有设置了资源限制,才能确保杜绝类似问题。
小结
这个问题应该是/proc 文件系统并不知道用户通过 Cgroups 给这个容器做了限制导致的
如果你在 Docker 容器中运行 Java 应用,一定要确保,在设置容器资源限制的同时,配置好 JVM 的资源选项(比如堆内存等)。当然,如果你可以升级 Java 版本,那么升级到 Java 10 ,就可以自动解决类似问题了。
当碰到容器化的应用程序性能时,你依然可以使用,我们前面讲过的各种方法来分析和定位。只不过要记得,容器化后的性能分析,跟前面内容稍微有些区别,比如下面这几点。
-
容器本身通过 cgroups 进行资源隔离,所以,在分析时要考虑 cgroups 对应用程序的影响。
-
容器的文件系统、网络协议栈等跟主机隔离。虽然在容器外面,我们也可以分析容器的行为,不过有时候,进入容器的命名空间内部,可能更为方便。
-
容器的运行可能还会依赖于其他组件,比如各种网络插件(比如 CNI)、存储插件(比如 CSI)、设备插件(比如 GPU)等,让容器的性能分析更加复杂。如果你需要分析容器性能,别忘了考虑它们对性能的影响。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 编译freetype:如果链接路径中能找到libpng,就会自动依赖,没有也能编译通过
昨天在MAC上编译JDK,信心满满的一执行,报错说freetype依赖的libpng没有找到。吾就奇怪了:之前没有这个错误啊。 于是检查了编译机器,发现系统并没有libpng,存在的libpng是之前编译ffmpeg时保留的结果。所以编译freetyp…...
2024/4/13 7:49:46 - 2022稳定版全网拼多多商品详情api接口sku,详情信息,促销价,优惠券信息等
2022稳定版全网拼多多商品详情api接口sku,详情信息,促销价,优惠券信息等 {"code": 1,"state": true,"msg": "调用成功","data": {"platform": "拼多多商品详情",&qu…...
2024/4/28 6:33:35 - 【dfs/bfs】994. 腐烂的橘子
题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格…...
2024/4/28 1:19:04 - ubuntu1804安装docker及其他容器
卸载旧版本: sudo apt-get remove docker docker-engine docker.io containerd runc 设置仓库: sudo apt-get update sudo apt-get install \ca-certificates \curl \gnupg \lsb-release Add Docker’s official GPG key: curl -fsSL https://downl…...
2024/4/28 10:06:30 - 【dfs/bfs】116. 填充每个节点的下一个右侧节点指针
题目 给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。…...
2024/4/28 11:11:27 - Pyinstaller封装报错“不是可用的win32程序”,“lib not found”等
关于问题的详细描述 报错来源查找: 因为之前成功封装过所以我认为不是系统的问题而是代码的问题。于是把代码一段段注释掉来定位问题所在。最后发现是“import pandas”出的问题。如果没有引用的话就能成功封装并运行。 解决方法: 1、寻找代替功能 此…...
2024/4/13 7:50:46 - 【dfs/bfs】695. 岛屿的最大面积
题目 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。 岛屿的面积是岛上值…...
2024/4/13 7:50:41 - Java项目:点餐系统(java+Springboot+ssm+mysql+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能:数据库采用mysq昨为数据存储,系统中涉及到的关 键表有,用户表、用户详情表、商品表、订单表、商品订 单关联表、评价表等等。本系统分为前端和后端&am…...
2024/4/13 7:50:36 - 【Android Gradle 插件】Android Gradle 工程结构简介 ( Gradle 默认输出目录 | Gradle 配置目录 | gradlew 可执行文件 )
文章目录一、Android Gradle 工程结构简介1、Gradle 默认输出目录2、Gradle 配置目录3、gradle.properties 配置文件4、gradlew 或 gradlew.bat 可执行文件5、local.properties 配置文件6、settings.gradle 配置文件Android Plugin DSL Reference 参考文档 : https://google.gi…...
2024/4/19 0:26:12 - 第六章 Nginx专题之后端应用集群配置负载均衡策略详述(图解+实测)
1、后端应用集群搭建 1.1、jar包上传 demo-1.jar:监听8080端口demo-1.jar:监听8081端口 1.2、接口说明 (1)接口一:GET请求 作用:返回Json数据,控制输出日志 http://127.0.0.1:8080/api/v1…...
2024/4/20 9:30:34 - 机器学习:matlab实现协同过滤算法进行电影推荐
文章目录原理载入数据代价-梯度函数求解预测原理 原理在此,其实就是改了一下代价-梯度函数的回归算法。 载入数据 MovieLens 100k Dataset from GroupLens Research. 包含943位用户、1682部电影。 % Load data load(ex8_movies.mat);% From the matrix, we can …...
2024/4/26 2:22:38 - ElasticSeach详细安装教程--图文介绍超详细
目录 前期准备 创建用户 下载ElasticSeach的安装包,本案例使用版本6.2.4 修改配置项jvm.options 修改配置项elasticsearch.yml 解决报错 启动Elasticsearch 1.3.1.错误1:内核过低 1.3.2.错误2:文件权限不足 1.3.3.错误3:…...
2024/4/13 7:50:51 - javascript知识
Javascript 一、简介 JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML网页上使用&a…...
2024/4/13 7:50:31 - 【二分查找】704. 二分查找
题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释:…...
2024/4/18 23:11:32 - css 简单知识
CSS样式表 一、概述 1、CSS是什么 ? 层叠样式表,定制html元素的显示样式,美化页面,对于前端页面的搭建十分重要 2、为什么要使用CSS (1)CSS 指层叠样式表 (Cascading Style Sheets) (2&…...
2024/4/19 4:01:44 - html简单内容
HTML # HTML是属于前端技术,主要使用进行前端网页的开发,使用HTML开发出来的网页是一个静态页面一、HTML简介 HTML 俗称网页,就是我们打开浏览器访问任何一个网站所看到的都是由 HTML 页面提供的(或者与 HTML 技术相关的内容提供…...
2024/4/13 7:50:36 - 【二分查找】278. 第一个错误的版本
题目 你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。 假设你有 n 个版本 [1, 2, …, n],你想找…...
2024/4/13 7:50:26 - springboot的mockmvc(了解)
一 mockmvc mockmvc 相当于postman的作用,模拟调用controller的接口服务。请求 Controller 层是否正常。 在面向对象的程序设计中,模拟对象(英语:mock object)是以可控的方式模拟真实对象行为的假对象。在编程过程中…...
2024/4/17 0:44:28 - 复杂美区块链溯源系统架构
从功能架构上,复杂美将区块链存证溯源系统按照功能划分为区块链核心层、接口层、运维管理层、溯源平台层和用户端层。 添加描述 (1)区块链基础层:面向整个存证溯源平台提供基础信息服务,主要是为上层架构组件提供基础设施,保证上…...
2024/4/13 7:50:21 - 寒假集训总结 (1.23~1.28) [第一梯队]
Day 1. 分治算法入门 一、分治法概述 分治法的设计思想 对于一个规模为nnn的问题:若该问题可以容易地解决(比如说规模nnn较小)则直接解决,否则将其分解为kkk个规模较小的子问题,这些子问题互相独立且与原问题形式相…...
2024/4/18 11:37:44
最新文章
- [前端] todoList制作
知识点回顾 后代选择器 可以使用多个选择器每个选择器之间用空格分开。只要是后代就会被选择如 <style>div a{color: red;} </style> <div><a href"">我是儿子</a><p><a href"">我是孙子</a></p>…...
2024/4/28 16:56:35 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 前端 js 经典:字符编码详解
前言:计算机只能识别二进制,开发语言中数据类型还有数字,字母,中文,特殊符号等,都需要转化成二进制编码才能让技术机识别。 一. 编码方式 ACSLL、Unicode、utf-8、URL 编码、base64 等。 1. ACSLL 对英语…...
2024/4/21 11:56:37 - windows更新驱动导致Linux虚拟机网卡找不到
windows更新驱动导致Linux虚拟机网卡找不到 1、现象2、解决过程3、参考 1、现象 原先虚拟机配置了静态IP,更新windows驱动后xshell连接不上这台虚拟机(其他几台也是)。 2、解决过程 service network restart出现一下报错: Rest…...
2024/4/25 19:19:14 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/28 13:52:11 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/28 3:28:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/28 13:51:37 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/28 15:57:13 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/28 1:22:35 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57