这里不是有经验的用户。
我使用的虚拟服务器有 2GB 内存和 1GB 交换空间。发行版是 CentOS Linux 版本 7.9.2009 (Core)。当我通过 ssh 连接服务器时,出现以下错误,并且由于内存不足导致连接中断。
-bash: xmalloc: cannot allocate 264241194 bytes (102400 bytes allocated)
我更新了服务器,现在确实有 8GB 的内存。我认为这是一个疯狂的进程,我需要终止它。我使用以下方法检查了正在运行的进程 ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n
结果让我很惊讶:
...
17.7031 MB /usr/bin/python2
24.707 MB /usr/bin/python2
24.7188 MB /opt/rh/rh-php73/root/usr/bin/php-cgi
34.3906 MB /usr/sbin/mysqld
3025.93 MB -bash
bash 占用了超过 3 GB 的内存。我又检查了几次,使用量在 2.5-4.0 GB 之间。
我不知道是什么原因导致的,也不知道该如何解决,但我确实希望 bash 占用的内存不会超过几兆字节。我想将服务器的内存降级回 2GB。
答案1
我不确定这是否构成一个答案,但如果不是,希望它至少是一个部分答案 - 而且它太大而不能成为评论 -
使用
ps aux | awk '{print $6/1024 " MB\t " $2 "\t" $11}' | sort -n | grep "bash"
要额外显示 bash 进程的 PID,请使用
pstree -show-pids
它应该显示一个包含 PID 的进程树,并且可以帮助您找到问题所在,如果有任何子进程正在消耗与 bash 进程的 PID 相关的内存。
答案2
尝试上述建议后,我注意到 bash 下没有其他 sup 进程:
├─sshd(805)───sshd(8336)───bash(8338)───pstree(8363)
我注意到,在启动 ssh 连接后,终端保持空闲状态几秒钟,然后出现以下错误。如果我单击 Ctrl+C,我会中断某些操作,它不会出现以下错误,而是让我登录。
-bash: xmalloc: cannot allocate 264241194 bytes (102400 bytes allocated)
所以我认为这可能是 bash 初始化的问题。然后我尝试了以下命令ssh username@ip -v /bin/bash -c "echo <(cat)"
。它给出了以下结果:
-bash: /etc/profile.d/nano.sh: cannot allocate 264241194 bytes (102400 bytes allocated)
我确实卸载了 nano,然后我删除了该文件rm /etc/profile.d/nano.sh
并再次安装了 nano。
重启后,一切正常。