mirror of https://github.com/apache/cassandra
get JEMAlloc debug output out of nodetool output
patch by Robert Stupp; reviewed by Ariel Weisberg for CASSANDRA-10628
This commit is contained in:
parent
a306a1bf32
commit
0ff13d2a68
|
|
@ -1,5 +1,5 @@
|
|||
2.2.4
|
||||
* Deprecate memory_allocator in cassandra.yaml (CASSANDRA-10581)
|
||||
* Deprecate memory_allocator in cassandra.yaml (CASSANDRA-10581,10628)
|
||||
* Expose phi values from failure detector via JMX and tweak debug
|
||||
and trace logging (CASSANDRA-9526)
|
||||
* Fix RangeNamesQueryPager (CASSANDRA-10509)
|
||||
|
|
|
|||
|
|
@ -132,6 +132,55 @@ case "`uname`" in
|
|||
;;
|
||||
esac
|
||||
|
||||
# Cassandra uses an installed jemalloc via LD_PRELOAD / DYLD_INSERT_LIBRARIES by default to improve off-heap
|
||||
# memory allocation performance. The following code searches for an installed libjemalloc.dylib/.so/.1.so using
|
||||
# Linux and OS-X specific approaches.
|
||||
# To specify your own libjemalloc in a different path, configure the fully qualified path in CASSANDRA_LIBJEMALLOC.
|
||||
# To disable jemalloc preload at all, set CASSANDRA_LIBJEMALLOC=-
|
||||
#
|
||||
#CASSANDRA_LIBJEMALLOC=
|
||||
#
|
||||
find_library()
|
||||
{
|
||||
pattern=$1
|
||||
path=$(echo ${2} | tr ":" " ")
|
||||
|
||||
find $path -regex "$pattern" -print 2>/dev/null | head -n 1
|
||||
}
|
||||
case "`uname -s`" in
|
||||
Linux)
|
||||
if [ -z $CASSANDRA_LIBJEMALLOC ] ; then
|
||||
which ldconfig > /dev/null 2>&1
|
||||
if [ $? = 0 ] ; then
|
||||
# e.g. for CentOS
|
||||
dirs="/lib64 /lib /usr/lib64 /usr/lib `ldconfig -v 2>/dev/null | grep -v ^$'\t' | sed 's/^\([^:]*\):.*$/\1/'`"
|
||||
else
|
||||
# e.g. for Debian, OpenSUSE
|
||||
dirs="/lib64 /lib /usr/lib64 /usr/lib `cat /etc/ld.so.conf /etc/ld.so.conf.d/*.conf | grep '^/'`"
|
||||
fi
|
||||
dirs=`echo $dirs | tr " " ":"`
|
||||
CASSANDRA_LIBJEMALLOC=$(find_library '.*/libjemalloc\.so\(\.1\)*' $dirs)
|
||||
fi
|
||||
if [ ! -z $CASSANDRA_LIBJEMALLOC ] ; then
|
||||
export JVM_OPTS="$JVM_OPTS -Dcassandra.libjemalloc=$CASSANDRA_LIBJEMALLOC"
|
||||
if [ "-" != "$CASSANDRA_LIBJEMALLOC" ] ; then
|
||||
export LD_PRELOAD=$CASSANDRA_LIBJEMALLOC
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
Darwin)
|
||||
if [ -z $CASSANDRA_LIBJEMALLOC ] ; then
|
||||
CASSANDRA_LIBJEMALLOC=$(find_library '.*/libjemalloc\.dylib' $DYLD_LIBRARY_PATH:${DYLD_FALLBACK_LIBRARY_PATH-$HOME/lib:/usr/local/lib:/lib:/usr/lib})
|
||||
fi
|
||||
if [ ! -z $CASSANDRA_LIBJEMALLOC ] ; then
|
||||
export JVM_OPTS="$JVM_OPTS -Dcassandra.libjemalloc=$CASSANDRA_LIBJEMALLOC"
|
||||
if [ "-" != "$CASSANDRA_LIBJEMALLOC" ] ; then
|
||||
export DYLD_INSERT_LIBRARIES=$CASSANDRA_LIBJEMALLOC
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
launch_service()
|
||||
{
|
||||
pidpath="$1"
|
||||
|
|
|
|||
|
|
@ -160,55 +160,6 @@ then
|
|||
export MALLOC_ARENA_MAX=4
|
||||
fi
|
||||
|
||||
# Cassandra uses an installed jemalloc via LD_PRELOAD / DYLD_INSERT_LIBRARIES by default to improve off-heap
|
||||
# memory allocation performance. The following code searches for an installed libjemalloc.dylib/.so/.1.so using
|
||||
# Linux and OS-X specific approaches.
|
||||
# To specify your own libjemalloc in a different path, configure the fully qualified path in CASSANDRA_LIBJEMALLOC.
|
||||
# To disable jemalloc at all set CASSANDRA_LIBJEMALLOC=-
|
||||
#
|
||||
#CASSANDRA_LIBJEMALLOC=
|
||||
#
|
||||
find_library()
|
||||
{
|
||||
pattern=$1
|
||||
path=$(echo ${2} | tr ":" " ")
|
||||
|
||||
find $path -regex "$pattern" -print 2>/dev/null | head -n 1
|
||||
}
|
||||
case "`uname -s`" in
|
||||
Linux)
|
||||
if [ -z $CASSANDRA_LIBJEMALLOC ] ; then
|
||||
which ldconfig > /dev/null 2>&1
|
||||
if [ $? = 0 ] ; then
|
||||
# e.g. for CentOS
|
||||
dirs="/lib64 /lib /usr/lib64 /usr/lib `ldconfig -v 2>/dev/null | grep -v ^$'\t' | sed 's/^\([^:]*\):.*$/\1/'`"
|
||||
else
|
||||
# e.g. for Debian, OpenSUSE
|
||||
dirs="/lib64 /lib /usr/lib64 /usr/lib `cat /etc/ld.so.conf /etc/ld.so.conf.d/*.conf | grep '^/'`"
|
||||
fi
|
||||
dirs=`echo $dirs | tr " " ":"`
|
||||
CASSANDRA_LIBJEMALLOC=$(find_library '.*/libjemalloc\.so\(\.1\)*' $dirs)
|
||||
fi
|
||||
if [ ! -z $CASSANDRA_LIBJEMALLOC ] && [ "-" != "$CASSANDRA_LIBJEMALLOC" ] ; then
|
||||
echo "INFO preloading $CASSANDRA_LIBJEMALLOC"
|
||||
export LD_PRELOAD=$CASSANDRA_LIBJEMALLOC
|
||||
else
|
||||
echo "WARNING could not find libjemalloc.dylib, please install for better performance - search path: $dirs"
|
||||
fi
|
||||
;;
|
||||
Darwin)
|
||||
if [ -z $CASSANDRA_LIBJEMALLOC ] ; then
|
||||
CASSANDRA_LIBJEMALLOC=$(find_library '.*/libjemalloc\.dylib' $DYLD_LIBRARY_PATH:${DYLD_FALLBACK_LIBRARY_PATH-$HOME/lib:/usr/local/lib:/lib:/usr/lib})
|
||||
fi
|
||||
if [ ! -z $CASSANDRA_LIBJEMALLOC ] && [ "-" != "$CASSANDRA_LIBJEMALLOC" ] ; then
|
||||
echo "INFO preloading $CASSANDRA_LIBJEMALLOC"
|
||||
export DYLD_INSERT_LIBRARIES=$CASSANDRA_LIBJEMALLOC
|
||||
else
|
||||
echo "WARNING could not find libjemalloc.dylib, please install for better performance - search path: $DYLD_LIBRARY_PATH:${DYLD_FALLBACK_LIBRARY_PATH-$HOME/lib:/usr/local/lib:/lib:/usr/lib}"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
# Specifies the default port over which Cassandra will be available for
|
||||
# JMX connections.
|
||||
|
|
|
|||
|
|
@ -67,7 +67,8 @@ public class StartupChecks
|
|||
// The default set of pre-flight checks to run. Order is somewhat significant in that we probably
|
||||
// always want the system keyspace check run last, as this actually loads the schema for that
|
||||
// keyspace. All other checks should not require any schema initialization.
|
||||
private final List<StartupCheck> DEFAULT_TESTS = ImmutableList.of(checkValidLaunchDate,
|
||||
private final List<StartupCheck> DEFAULT_TESTS = ImmutableList.of(checkJemalloc,
|
||||
checkValidLaunchDate,
|
||||
checkJMXPorts,
|
||||
inspectJvmOptions,
|
||||
checkJnaInitialization,
|
||||
|
|
@ -103,6 +104,22 @@ public class StartupChecks
|
|||
test.execute();
|
||||
}
|
||||
|
||||
public static final StartupCheck checkJemalloc = new StartupCheck()
|
||||
{
|
||||
public void execute() throws StartupException
|
||||
{
|
||||
if (FBUtilities.isWindows())
|
||||
return;
|
||||
String jemalloc = System.getProperty("cassandra.libjemalloc");
|
||||
if (jemalloc == null)
|
||||
logger.warn("jemalloc shared library could not be preloaded to speed up memory allocations");
|
||||
else if ("-".equals(jemalloc))
|
||||
logger.info("jemalloc preload explicitly disabled");
|
||||
else
|
||||
logger.info("jemalloc seems to be preloaded from {}", jemalloc);
|
||||
}
|
||||
};
|
||||
|
||||
public static final StartupCheck checkValidLaunchDate = new StartupCheck()
|
||||
{
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue