我在改变 LD_LIBRARY_PATH
时遇到了奇怪的副作用。
当我添加一个包含库的路径时,比如:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_path/lib
然后,一切都变得难以置信的慢。例如,一个简单的
ls
可能需要10秒钟才能完成。在
LD_LIBRARY_PATH
更改之前和之后,ldd
输出完全相同,并且我尝试使用strace
调试缓慢的ls
的执行:在两种情况下,我得到了完全相同的执行结果。执行甚至没有在ls
的执行过程中卡住(因为strace
在10秒的延迟期间不输出任何内容,然后突然完美地执行ls
)。所以我认为问题可能出现在我的shell中,但是这也是一样的,在我的bash上运行strace
并在两种情况下执行ls
会给我相同的strace
输出:shell执行ls
并等待其执行结束(延迟strace
之前的最后一个strace
输出是waitpid(...)
)。所以我猜测在启动ls
和它的执行之间发生了一些错误,就像是内核级别的问题。它的表现就像在ls
上进行了sleep
一样(0 CPU使用率)。在延迟期间,我的CPU和网络活动都非常正常...
请注意,新的LD路径中的库不会与任何“标准库”冲突,因此它不会干扰我的示例中的
ls
。因此,我对
LD_LIBRARY_PATH
的副作用或如何深入调试我的示例感兴趣。
LD_LIBRARY_PATH
,但从未看到过这样的行为,然而你的观察似乎既孤立又明确。有趣。 - thbexport LD_DEBUG=all
是一个命令,用于设置环境变量LD_DEBUG的值为'all',以便在运行程序时输出调试信息。man 8 ld.so
是一个命令,用于查看ld.so(动态链接器)的手册页面,包括它的用法和选项等信息。 - William PursellLD_DEBUG=all
):有一条路径在LD_LIBRARY_PATH
中不存在,这条路径在一个远程服务器上... 但是同一个服务器上的其他路径绝对没有任何问题... - Julio Guerra