mirror of
https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
synced 2025-02-07 06:02:53 +08:00
Long distance memory overflow issue
Problem: The memory will slowly increase with the drawing until restarting. Observation: GC analysis shows that no occupation has occurred, so it is suspected to be a problem with the underlying allocator. Reason: Under Linux, glibc is used to allocate memory. glibc uses brk and mmap to allocate memory, and the memory allocated by brk cannot be released until the high-address memory is released. That is to say, if you apply for two pieces of memory A and B through brk, it is impossible to release A before B is released, and it is still occupied by the process. Check the suspected "memory leak" through TOP. So I replaced TCMalloc, but found that libtcmalloc_minimal could not find ptthread_Key_Create. After analysis, it was found that pthread was not entered during compilation.
This commit is contained in:
parent
42dbcad3ef
commit
4d56383025
30
webui.sh
30
webui.sh
@ -222,13 +222,29 @@ fi
|
|||||||
# Try using TCMalloc on Linux
|
# Try using TCMalloc on Linux
|
||||||
prepare_tcmalloc() {
|
prepare_tcmalloc() {
|
||||||
if [[ "${OSTYPE}" == "linux"* ]] && [[ -z "${NO_TCMALLOC}" ]] && [[ -z "${LD_PRELOAD}" ]]; then
|
if [[ "${OSTYPE}" == "linux"* ]] && [[ -z "${NO_TCMALLOC}" ]] && [[ -z "${LD_PRELOAD}" ]]; then
|
||||||
TCMALLOC="$(PATH=/usr/sbin:$PATH ldconfig -p | grep -Po "libtcmalloc(_minimal|)\.so\.\d" | head -n 1)"
|
# Define Tcmalloc Libs arrays
|
||||||
if [[ ! -z "${TCMALLOC}" ]]; then
|
TCMALLOC_LIBS=("libtcmalloc(_minimal|)\.so\.\d" "libtcmalloc\.so\.\d")
|
||||||
echo "Using TCMalloc: ${TCMALLOC}"
|
|
||||||
export LD_PRELOAD="${TCMALLOC}"
|
# Traversal array
|
||||||
else
|
for lib in "${TCMALLOC_LIBS[@]}"
|
||||||
printf "\e[1m\e[31mCannot locate TCMalloc (improves CPU memory usage)\e[0m\n"
|
do
|
||||||
fi
|
#Determine which type of tcmalloc library the library supports
|
||||||
|
TCMALLOC="$(PATH=/usr/sbin:$PATH ldconfig -p | grep -P $lib | head -n 1)"
|
||||||
|
TC_INFO=(${TCMALLOC//=>/})
|
||||||
|
if [[ ! -z "${TC_INFO}" ]]; then
|
||||||
|
echo "Using TCMalloc: ${TC_INFO}"
|
||||||
|
#Determine if the library is linked to libptthread and resolve undefined symbol: ptthread_Key_Create
|
||||||
|
if ldd ${TC_INFO[2]} | grep -q 'libpthread'; then
|
||||||
|
echo "$TC_INFO is linked with libpthread,execute LD_PRELOAD=${TC_INFO}"
|
||||||
|
export LD_PRELOAD="${TC_INFO}"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo "$TC_INFO is not linked with libpthreadand will trigger undefined symbol: ptthread_Key_Create error"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "\e[1m\e[31mCannot locate TCMalloc (improves CPU memory usage)\e[0m\n"
|
||||||
|
fi
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user