关于使用vscode_remote-ssh连接低配内存ecs致卡死的解决策略

关于使用vscode_remote-ssh连接低配内存ecs致卡死的解决策略

2025 06 02

长话短说。新购一台阿里云2v1g30g的香港ecs用以写博客,terminal连接ssh时一切正常。vscode_remote-ssh连接即掉线、nginx服务停止、原本terminal中ssh卡死甚至不能输入exit以退回本地,须得通过阿里云控制台重启/强制重启。轮回数次后发现症结所在:内存太小!

检查

  1. 检查发现虚拟内存没在用

    free -h
     total used free shared buff/cache available 
    Mem: 890Mi 448Mi 62Mi 3.0Mi 379Mi 291Mi 
    Swap: 1.0Gi 0B 1.0Gi
  2. 先临时修改

    #2.1.swappiness范围:0 ≤ swappiness ≤ 100
    #2.2.swappiness越小越倾向用ram,越大越倾向于用swap。我认为该场景中还是要减少换页
    #2.3.建议设为10-90再视情况调整
    sysctl -w vm.swappiness=10
    #2.4.[以下可选] 修改/etc/sysctl.conf内核参数配置文件,增加
    vm.swappiness = 10 #如vim /etc/sysctl.conf __ v __ shift+g __ i __ vm.swappiness = 10 __ esc __ :wq回车
    #2.5.需执行永久生效
    sysctl -p
  3. 修改后尝试使用vscode连接 command + shift + p,connect-host,选择~.ssh/config中先前添加的host,成功。open folder了/root/blog,成功。

  4. 使用vscode的terminal再次执行free -h

    free -h
               total        used        free      shared  buff/cache   available
    Mem:           890Mi       695Mi        64Mi       1.0Mi       130Mi        61Mi
    Swap:          1.0Gi       355Mi       669Mi
    ps aux --sort=-%mem | head -n 5
    USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root        7287  5.9 43.1 54924836 393564 ?     Sl   13:32   0:12 /root/.vscode-server/cli/servers/Stable-848b80aeb52026648a8ff9f7c45a9b0a80641e2e/server/node --dns-result-order=ipv4first /root/.vscode-server/cli/servers/Stable-848b80aeb52026648a8ff9f7c45a9b0a80641e2e/server/out/bootstrap-fork --type=extensionHost --transformURIs --useHostProxy=false
    root        7647  0.0  3.7  43600 34292 ?        R    13:35   0:00 /www/server/panel/pyenv/bin/python /www/server/panel/script/push_msg.py
    root        2954  0.1  3.4 1313868 31332 ?       Sl   11:57   0:10 /root/.vscode-server/cli/servers/Stable-848b80aeb52026648a8ff9f7c45a9b0a80641e2e/server/node /root/.vscode-server/cli/servers/Stable-848b80aeb52026648a8ff9f7c45a9b0a80641e2e/server/out/server-main.js --connection-token=remotessh --accept-server-license-terms --start-server --enable-remote-auto-shutdown --socket-path=/tmp/code-87a5129d-dc80-49b7-bece-c0e1432284b1
    root        3000  0.1  3.2 1407888 30060 ?       Sl   11:57   0:07 /root/.vscode-server/cli/servers/Stable-848b80aeb52026648a8ff9f7c45a9b0a80641e2e/server/node /root/.vscode-server/cli/servers/Stable-848b80aeb52026648a8ff9f7c45a9b0a80641e2e/server/out/bootstrap-fork --type=ptyHost --logsPath /root/.vscode-server/data/logs/20250603T115744

总结:稳妥起见就只使用sysctl -w vm.swappiness=10,若长期稳定运行则不需其他操作。不过说到底vscode还是挺能吃的。

其他策略

#创建新swap
fallocate -l 1G /swapfile2 
#仅root可读写
chmod 600 /swapfile2 
#格式化为swap
mkswap /swapfile2 
#启用该配置
swapon /swapfile2 
#开机挂载
echo '/swapfile2 none swap sw 0 0' >> /etc/fstab
# /swapfile2 创建的文件名
# none 无需挂载路径
# swap 作设备挂载
# sw mkswap&&swapon
# 0 0 dump=0,fsck=0无需备份与检查