本文主要是介绍VSCode在CentOS 7.9启动后,两个进程分别占CPU 100%,界面卡住无法点击,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
VSCode在CentOS 7.9启动后,两个进程分别占CPU 100%,界面卡住无法点击
环境描述
OS: CentOS 7.9
App: vscode 1.60.0
问题描述
通过命令/app/opensrc/vscode/1.60.0/share/code-insiders/code-insiders
命令启动,terminal中刷大量的错误信息,应用界面能弹出来但是无法操作,是卡住的。
从另外一个terminal中查看vscode的进程,发现两个进程占用100%的CPU。
问题定位
使用strace追踪,发现卡住后刷的都是futex系统调用。但未定位到是在等待什么资源就绪。
于是查看了一下vscode
帮助,可以使用--verbose
来输出运行时的详细信息:
[thesre@icinfra ~]$ /app/opensrc/vscode/1.60.0/share/code-insiders/code-insiders --verbose |& egrep -o "Error: .* version .* not found" | sort -u
Error: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found
Error: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
Error: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
可以看到,有3个symbol版本没找到。需要找一个提供满足这些符号版本的libstdc++.so.6
。
问题解决
加载高版本GCC(本案例加载的是gcc-10.2.0-gcc-9.4.0-xavznvl
),再运行vscode
,发现没有找不到的符号了,如下所示:
[thesre@icinfra ~]$ module avail gcc #查看所有gcc版本
-------------------------- /app/spack-0.16.2/share/spack/modules/linux-centos7-sandybridge ---------------------------
gcc-10.2.0-gcc-9.4.0-xavznvl Key:
loaded modulepath
[thesre@icinfra ~]$ module show gcc-10.2.0-gcc-9.4.0-xavznvl # 查看是否设置了共享库路径到LD_LIBRARY_PATH,是有设置的。
-------------------------------------------------------------------
/app/spack-0.16.2/share/spack/modules/linux-centos7-sandybridge/gcc-10.2.0-gcc-9.4.0-xavznvl:module-whatis {The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages.}
prepend-path LD_LIBRARY_PATH /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/lib
prepend-path LIBRARY_PATH /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/lib
prepend-path LD_LIBRARY_PATH /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/lib64
prepend-path LIBRARY_PATH /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/lib64
prepend-path PATH /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/bin
prepend-path MANPATH /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/share/man
prepend-path C_INCLUDE_PATH /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/include
prepend-path CPLUS_INCLUDE_PATH /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/include
prepend-path INCLUDE /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/include
prepend-path CMAKE_PREFIX_PATH /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/
setenv CC /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/bin/gcc
setenv CXX /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/bin/g++
setenv FC /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/bin/gfortran
setenv F77 /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/bin/gfortran
-------------------------------------------------------------------
[thesre@icinfra ~]$ find /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/ -name libstdc++.so.6 #从这个gcc版本下找libstdc++.so.6
/app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/lib64/libstdc++.so.6
[thesre@icinfra ~]$ strings /app/spack-0.16.2/opt/spack/linux-centos7-sandybridge/gcc-9.4.0/gcc-10.2.0-xavznvl7ibbj6w7d2hvmzn3cfz3oosyn/lib64/libstdc++.so.6 | egrep 'CXXABI_1.3.9|GLIBCXX_3.4.20|GLIBCXX_3.4.21' | sort -u #从这个libstdc++.so.6文件中,能找到上面not found的三个symbol版本
CXXABI_1.3.9
GLIBCXX_3.4.20
GLIBCXX_3.4.21
[thesre@icinfra ~]$ module load gcc-10.2.0-gcc-9.4.0-xavznvl #加载gcc-10.2.0-gcc-9.4.0-xavznvl
[thesre@icinfra ~]$ /app/opensrc/vscode/1.60.0/share/code-insiders/code-insiders --verbose |& grep 'not found'
# 无输出,说明库/符号版本满足。
界面正常打开
再打开top看下CPU使用情况,发现还是两个进程占用近100%的CPU,但程序能够正常地跑起来了,本案例的CPU利用率高没有说明什么问题。
总结
不同的工具,其debug的方式不一样。部分工具未向普通用户提供debug信息;部分则提供,但要通过设置变量或指明选项,来将其显示出来。
本例中,vscode
要指定--verbose
来显示debug信息。
这篇关于VSCode在CentOS 7.9启动后,两个进程分别占CPU 100%,界面卡住无法点击的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!