马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
vscode ssh-remote疑似内存走漏标题
体系信息与版本号
版本:1.88.1(通用)
日期:2024-04-10T17:42:52.765Z
Electron: 28.2.8
ElectronBuildId: 27744544
Chromium:120.0.6099.291
Node.js:18.18.2
V8:12.0.267.19-electron.0
利用体系:Darwin x64 23.4.0
标题形貌
vscode 的 ssh-remote 插件毗连之后,会发现内存不绝上涨,然后导致云主机瓦解。ubantu22.04与debian等体系均有这种情况。
疑似出现了内存走漏,颠末细致查抄发现vscode-server这个进程会不绝添加新的进程进去,标题复现步调:
- 使用 TypeScript 文件打开远程工作区
- 等候“正在初始化 JS/TS 语言功能”状态栏指示器克制出现。
- 运行此脚本以获取 ionotify 观察步调进程列表:脚本
- 请注意下令类似于 ~/.vscode-server/cli/servers/Stable-e170252f762678dec6ca2cc69aba1570769a5d39/server/node 的进程数量
- 重新加载窗口
- 重复步调 2 到 4,你会发现步调 4 中记下的数字比前次增长了。
脚本
- #!/bin/bash
- # Get the procs sorted by the number of inotify watches
- # @author Carl-Erik Kopseng
- # @latest https://github.com/fatso83/dotfiles/blob/master/utils/scripts/inotify-consumers
- # Discussion leading up to answer: https://unix.stackexchange.com/questions/15509/whos-consuming-my-inotify-resources
- #
- # If you need ultimate speed, use https://github.com/fatso83/dotfiles/commit/inotify-consumers-v1-fastest
- # # Speed enhancements by Simon Matter <[email protected]>
- #
- # A later PR introduced a significant slowdown to gain better output, but it is insignificant on most machines
- # See this for details: https://github.com/fatso83/dotfiles/pull/10#issuecomment-1122374716
- main(){
- # get terminal width
- declare -i COLS=$(tput cols 2>/dev/null || echo 80)
- declare -i WLEN=10
- printf "\n%${WLEN}s %${WLEN}s\n" "INOTIFY" "INSTANCES"
- printf "%${WLEN}s %${WLEN}s\n" "WATCHES" "PER "
- printf "%${WLEN}s %${WLEN}s %s\n" " COUNT " "PROCESS " "PID USER COMMAND"
- printf -- "------------------------------------------------------------\n"
- generateData
- }
- usage(){
- cat << EOF
- Usage: $0 [--help|--limits]
- -l, --limits Will print the current related limits and how to change them
- -h, --help Show this help
- EOF
- }
- limits(){
- printf "\nCurrent limits\n-------------\n"
- sysctl fs.inotify.max_user_instances fs.inotify.max_user_watches
- cat <<- EOF
- Changing settings permanently
- -----------------------------
- echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
- sudo sysctl -p # re-read config
- EOF
- }
- if [ "$1" = "--limits" -o "$1" = "-l" ]; then
- limits
- exit 0
- fi
- if [ "$1" = "--help" -o "$1" = "-h" ]; then
- usage
- exit 0
- fi
- if [ -n "$1" ]; then
- printf "\nUnknown parameter '$1'\n" >&2
- usage
- exit 1
- fi
- generateData(){
- local -i PROC
- local -i PID
- local -i CNT
- local -i INSTANCES
- local -i TOT
- local -i TOTINSTANCES
- # read process list into cache
- local PSLIST="$(ps ax -o pid,user=WIDE-COLUMN,command --columns $(( COLS - WLEN )))"
- local INOTIFY="$(find /proc/[0-9]*/fdinfo -type f 2>/dev/null | xargs grep ^inotify 2>/dev/null)"
- local INOTIFYCNT="$(echo "$INOTIFY" | cut -d "/" -s --output-delimiter=" " -f 3 |uniq -c | sed -e 's/:.*//')"
- # unique instances per process is denoted by number of inotify FDs
- local INOTIFYINSTANCES="$(echo "$INOTIFY" | cut -d "/" -s --output-delimiter=" " -f 3,5 | sed -e 's/:.*//'| uniq |awk '{print $1}' |uniq -c)"
- local INOTIFYUSERINSTANCES="$(echo "$INOTIFY" | cut -d "/" -s --output-delimiter=" " -f 3,5 | sed -e 's/:.*//' | uniq |
- while read PID FD; do echo $PID $FD $(grep -e "^\ *${PID}\ " <<< "$PSLIST"|awk '{print $2}'); done | cut -d" " -f 3 | sort | uniq -c |sort -nr)"
- set -e
- cat <<< "$INOTIFYCNT" |
- {
- while read -rs CNT PROC; do # count watches of processes found
- echo "${PROC},${CNT},$(echo "$INOTIFYINSTANCES" | grep " ${PROC}$" |awk '{print $1}')"
- done
- } |
- grep -v ",0," | # remove entires without watches
- sort -n -t "," -k 2,3 -r | # sort to begin with highest numbers
- { # group commands so that $TOT is visible in the printf
- IFS=","
- while read -rs PID CNT INSTANCES; do # show watches and corresponding process info
- printf "%$(( WLEN - 2 ))d %$(( WLEN - 2 ))d %s\n" "$CNT" "$INSTANCES" "$(grep -e "^\ *${PID}\ " <<< "$PSLIST")"
- TOT=$(( TOT + CNT ))
- TOTINSTANCES=$(( TOTINSTANCES + INSTANCES))
- done
- # These stats should be per-user as well, since inotify limits are per-user..
- printf "\n%$(( WLEN - 2 ))d %s\n" "$TOT" "WATCHES TOTAL COUNT"
- # the total across different users is somewhat meaningless, not printing for now.
- # printf "\n%$(( WLEN - 2 ))d %s\n" "$TOTINSTANCES" "TOTAL INSTANCES COUNT"
- }
- echo ""
- echo "INotify instances per user (e.g. limits specified by fs.inotify.max_user_instances): "
- echo ""
- (
- echo "INSTANCES USER"
- echo "----------- ------------------"
- echo "$INOTIFYUSERINSTANCES"
- ) | column -t
- echo ""
- }
- main
复制代码 原标题网址
简朴来形貌这个标题,就是每次使用ssh-remote毗连之后,会出现一个标题:
~/.vscode-server/cli/servers/Stable-…这个进程的数量增长了
当你关闭毗连后,这个进程不会消散,但是下一次打开毗连后,会产生新的进程,如许的效果就是导致进程数量不绝增长导致占用的内存越来越多,末了导致体系瓦解重启。
修复方式
将 vscode 更新到预发布版本,开发者已经在最新的预发布版本中办理了这个标题。
|