我在改變LD_LIBRARY_PATH
時有奇怪的副作用。LD_LIBRARY_PATH副作用
當我附加一個包含庫的路徑時,例如:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_path/lib
然後,一切都變得令人難以置信的慢。例如,簡單的ls
可以是10秒鐘。
ldd
輸出是完全一樣的前後LD_LIBRARY_PATH
變化後,我試圖用strace
調試慢ls
的執行:我得到了這兩種情況下完全相同的執行。在執行ls
時執行甚至沒有卡住(因爲strace
在10秒的延遲期間不輸出任何內容,然後突然完美地執行ls
)。所以我認爲它可能來自我的shell,但這是相同的,在我的bash上運行strace
並在兩種情況下都執行ls
給我相同的strace
輸出:shell執行ls
並等待其執行結束(最後一個strace
輸出滯後strace
是waitpid(...)
)。所以我猜想ls
的啓動和它的執行之間會發生錯誤,就像它是內核級別的問題一樣。它的行爲就好像是sleep
是在ls
(0 cpu使用率)上生成的。
期間的滯後性,我的CPU和網絡活動是完全正常的...
注意的是,在新的LD路徑中的庫不與任何「標準庫」相沖突,所以它不會打擾在我ls
例。
所以我對LD_LIBRARY_PATH
副作用或如何深入調試我的例子的深入解釋很有趣。
好問題。我使用過'LD_LIBRARY_PATH'並且從未見過這種行爲,但你的觀察看起來既孤立又清晰。有趣。 – thb
'export LD_DEBUG = all'和'man 8 ld.so' –
顯而易見,但如果ls使用LD_LIBRARY_PATH中的任何內容,「ldd $(which ls)」可能會提供線索。 – Matthias