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
|
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
|
* Expose phi values from failure detector via JMX and tweak debug
|
||||||
and trace logging (CASSANDRA-9526)
|
and trace logging (CASSANDRA-9526)
|
||||||
* Fix RangeNamesQueryPager (CASSANDRA-10509)
|
* Fix RangeNamesQueryPager (CASSANDRA-10509)
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,55 @@ case "`uname`" in
|
||||||
;;
|
;;
|
||||||
esac
|
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()
|
launch_service()
|
||||||
{
|
{
|
||||||
pidpath="$1"
|
pidpath="$1"
|
||||||
|
|
|
||||||
|
|
@ -160,55 +160,6 @@ then
|
||||||
export MALLOC_ARENA_MAX=4
|
export MALLOC_ARENA_MAX=4
|
||||||
fi
|
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
|
# Specifies the default port over which Cassandra will be available for
|
||||||
# JMX connections.
|
# 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
|
// 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
|
// 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.
|
// 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,
|
checkJMXPorts,
|
||||||
inspectJvmOptions,
|
inspectJvmOptions,
|
||||||
checkJnaInitialization,
|
checkJnaInitialization,
|
||||||
|
|
@ -103,6 +104,22 @@ public class StartupChecks
|
||||||
test.execute();
|
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()
|
public static final StartupCheck checkValidLaunchDate = new StartupCheck()
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue