![在 bash 中,有没有办法查看 .bashrc 和任何启动脚本消耗了多少内存?](https://linux22.com/image/196479/%E5%9C%A8%20bash%20%E4%B8%AD%EF%BC%8C%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E6%9F%A5%E7%9C%8B%20.bashrc%20%E5%92%8C%E4%BB%BB%E4%BD%95%E5%90%AF%E5%8A%A8%E8%84%9A%E6%9C%AC%E6%B6%88%E8%80%97%E4%BA%86%E5%A4%9A%E5%B0%91%E5%86%85%E5%AD%98%EF%BC%9F.png)
在 bash 中,.bashrc
(以及各种其他脚本)可以在 shell 启动时加载到内存中。这些可以是 10 行长,但也可以是数百(如果不是数千)行长。每个导出都会消耗少量的内存,并且每个函数和每个别名也需要在内存中保存少量资源。另一个考虑因素是,我们不能只查看 和其他脚本的大小,.bashrc
因为它们可能有大量不消耗内存的注释。
我想删除所有启动脚本,启动系统,等待几分钟让事情稳定下来,然后采取某种基线,然后将启动脚本放回原位,重新启动系统并执行相同的练习来尝试和获取某种资源/性能差异。
您能建议哪些工具可以帮助确定这一点吗?我有一组相对较大的启动脚本,大约 15k,定义了许多函数和别名,所以我真的很好奇有什么影响(如果有的话,作为一个具有 16 GB 内存和快速现代 Core i5 的现代系统,效果可能会可以忽略不计)这对系统消耗的资源有何影响?即使我的启动脚本的影响很小,我仍然希望能够采取基线,然后进行“负载测试”,以对系统如何处理运行一组给定的应用程序进行一些评估。
答案1
启动脚本和最终设置的影响将主要影响交互式 shell;要确定最终的资源消耗,您无需费尽心思。打开一个终端窗口,以便您的默认 shell 以其默认设置启动,然后启动一个 shell 而不加载启动脚本,并从该 shell 中运行ps -F
:
$ bash --norc
$ ps -F
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
steve 3922819 3921628 0 2307 4812 7 20:49 pts/14 00:00:00 bash
steve 3922883 3922819 0 2276 4688 5 20:49 pts/14 00:00:00 bash --norc
steve 3922884 3922883 0 2892 4244 0 20:49 pts/14 00:00:00 ps -F
查看该RSS
专栏显示我的 bash 设置(相当小)比简单的 bash 多使用 124KiB。
我的 Zsh 设置更复杂:
$ zsh -f
$ ps -F
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
steve 3921244 18008 0 3341 8296 2 20:43 pts/14 00:00:00 zsh
steve 3921628 3921244 0 2829 5856 5 20:44 pts/14 00:00:00 zsh -f
steve 3923250 3922883 0 2892 4132 7 20:51 pts/14 00:00:00 ps -F
差异较大,为 2440KiB。
非交互式 shell 不会加载相同的启动脚本,并且它们无论如何也不会存活很长时间 - 如果您运行等ps -FC sh
,ps -FC bash
您应该会看到没有很多(如果有的话)。
您在环境中加载的内容可能会产生更大的影响;要了解这一点,请查看 的实际大小/proc/.../environ
:
$ sudo wc -c /proc/*/environ | tail -n 1
758799 total
总计 741KiB,可容纳近千个正在运行的进程。