【问题标题】:PIN tool does not work on PostgresqlPIN 工具在 Postgresql 上不起作用
【发布时间】:2012-08-07 03:35:29
【问题描述】:

我正在使用 PIN 工具来跟踪运行 sql 查询时读取和写入的内存量。然而,奇怪的事情发生了。我从运行中获得的 pinatrace.out 中用于读/写的内存地址

./pin -t pinatrace.so -- /usr/local/pgsql/bin/psql postgres < tmp.sql

... 不会与我从 postgresql 打印的内存地址重叠。

我在 postgresql 源代码中添加了几行来打印出一些虚拟指针的地址。它确实按我的预期打印出日志中的内存地址,但是在包含将 pin 附加到 psql 时已访问的所有内存地址的“pinatrace.out”中找不到这些地址。

但是,当我将相同的虚拟指针打印地址行复制到一个简单的 test.c 文件中并运行时

./pin -t pinatrace.so -- ./test

...屏幕输出的地址可以在 pinatrace.out 中找到。

这两个测试都是由 postgres 运行的,因为我将 PIN 的所有者更改为 postgres。

我真的很困惑。有人可以指出发生了什么吗? postgres 分配内存的方式是否不同,或者我可能会错误地运行 pin?任何想法都会有所帮助!

如果您希望我进一步澄清问题,请告诉我。

【问题讨论】:

    标签: postgresql memory


    【解决方案1】:

    psql 和 postgresql 服务器从不共享内存,即使它们以同一个用户身份运行:它们的所有通信都是通过套接字完成的。如果要调查服务器后端如何访问内存,则需要将跟踪器附加到后端进程,而不是 psql。

    当您使用 psql 连接时,会创建一个专用于该连接的新后端进程。因此,如果 PIN 工具支持(例如,像 gdb 那样),您可以从该 psql 调用 pg_backend_pid() 并找到要附加到的进程 ID。

    【讨论】:

    • 感谢您的回答!经过许多不同的实验后,我开始怀疑情况是否如此。我正在尝试将后端 sql pid 附加到 pin 工具但没有成功。 pinatrace.so 似乎需要一个应用程序名称(路径)。有没有人在 postgresql 上尝试过 pin 工具?
    • 杰斯,记得接受答案(按勾)以感谢发帖者。
    猜你喜欢
    • 2011-04-09
    • 2015-11-18
    • 2022-09-26
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2019-08-25
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多