0

我们正在尝试使用oprofile来跟踪服务器集群上的性能问题。但是,有问题的服务器有一个只读文件系统,其中 /var/tmp 是唯一可写的目录。

OProfile 想要在运行时创建两个目录:/root/.oprofile/var/lib/oprofile,但它不能,因为文件系统是只读的。我可以使用--session-dir命令行选项使其将日志写入./var/lib/root/.oprofile

文件系统是只读的,因为它位于不可写介质上,而不是因为权限——即,即使是超级用户也不能写入这些目录。我们可以制作文件系统的新 ROM 映像(显然,这就是我们安装 oprofile 的方式),但是运行时程序无法写入 /root,无论它是否是超级用户。

我尝试在指向 /root/.oprofile -> /var/tmp/oprofile 的 ROM 中创建一个符号链接,但显然 oprofile 没有将此符号链接视为目录,并且在运行时失败:

redacted@redacted:~$ sudo opcontrol --no-vmlinux --start --session-dir=/var/tmp/oprofile/foo
mkdir: cannot create directory `/root/.oprofile': File exists
Couldn't mkdir -p /root/.oprofile

我们必须在这个特定系统上运行我们的分析器,因为如果我们在开发服务器上构建和运行应用程序,我们试图调查的性能问题不会显现出来。我们不能只在程序员的工作站上运行我们的测试并在那里配置应用程序,因为问题不会在那里发生。

有没有办法配置 oprofile 使其不使用/root

4

2 回答 2

0

我想它应该像覆盖 HOME 环境变量一样简单:

HOME=/tmp/fakehome sudo -E opcontrol --no-vmlinux --start --session-dir=/var/tmp/oprofile/foo

如果这不起作用,你可以看看

  • 工会
  • 奥夫斯

创建一个可写的覆盖。你甚至可能只是挂载tmpfs在 /root 上,或者类似的简单的东西。

于 2011-11-01T23:56:28.620 回答
0

事实证明,这个目录被硬编码到opcontrolbash 脚本中:

  # location for daemon setup information
    SETUP_DIR="/root/.oprofile"
    SETUP_FILE="$SETUP_DIR/daemonrc"

编辑这些行似乎或多或少地让它工作。

于 2011-11-02T01:50:43.553 回答