【问题标题】:Need bash script that constantly uses high memory but low cpu?需要不断使用高内存但低 cpu 的 bash 脚本?
【发布时间】:2015-12-09 22:24:16
【问题描述】:

我正在运行一些实验来查看不同内存和 CPU 负载下系统行为的变化。我想知道是否有一个经常使用高内存但低 CPU 的 bash 脚本?

【问题讨论】:

  • 内存负载到底是什么意思?已分配但未主动访问的内存将被换出;如果您希望内存真正被访问...好吧,这是可行的,但 bash 不是我的首选;使用较低级别的语言,您将拥有更多更多的控制权。
  • 这应该在 C 中完成。使用大型 malloc。
  • @CharlesDuffy 是的,我只想要已分配且可以换出的内存。没有必要主动访问它。
  • 你希望它完成什么?已分配且从未访问过的内存可能是纯虚拟的,甚至根本不会映射物理页面,这意味着它对性能的影响为零(在 64 位系统或类似系统上)。

标签: bash shell sh


【解决方案1】:

为了模拟 CPU/内存/IO 负载,大多数 *NIX 系统(包括 Linux)都提供名为 stress 的便捷工具。

该工具因操作系统而异。 On Linux, 占用 512MB RAM 且 CPU 负载低:

stress --vm 1 --vm-bytes 512M --vm-hang 100

(调用的意思是:启动一个内存线程(--vm 1),每个线程分配/释放512MB内存,释放内存前休眠100秒。)

【讨论】:

  • 一个很好的答案:这比单纯的静态分配要实用得多,很多,尽管 OP 说他们只对后者感兴趣。
  • 我不会评判:我见过太多只安装了准系统操作系统的生产 *NIX 系统。在这种情况下,shell/sed/awk 几乎是唯一可用的工具。
【解决方案2】:

这很愚蠢,不能合理地期望提供在任何实际场景中都有用的数据。但是,要生成至少与给定的两个字节的幂相关的内存消耗量:

build_string() {
  local pow=$1
  local dest=$2
  s=' '
  for (( i=0; i<pow; i++ )); do
    s+="$s"
  done
  printf -v "$dest" %s "$s"
}

build_string 10 kilobyte    # build a string of length 1024
echo "Kilobyte string consumes ${#kilobyte} bytes"

build_string 20 megabyte    # build a string of length 1048576
echo "Megabyte string consumes ${#megabyte} bytes"

请注意,在施工期间,暂时需要至少 2 倍所请求的空间(对于本地);没有此行为的版本将使用 namevars(取决于 bash 4.3)或 eval(取决于作者做坏事的意愿)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多