You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sn...@apache.org on 2015/11/04 23:32:32 UTC
cassandra git commit: get JEMAlloc debug output out of nodetool output
Repository: cassandra
Updated Branches:
refs/heads/cassandra-2.2 a306a1bf3 -> 0ff13d2a6
get JEMAlloc debug output out of nodetool output
patch by Robert Stupp; reviewed by Ariel Weisberg for CASSANDRA-10628
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0ff13d2a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0ff13d2a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0ff13d2a
Branch: refs/heads/cassandra-2.2
Commit: 0ff13d2a6847f7ecba1ac9a26b66714d9e58b60d
Parents: a306a1b
Author: Robert Stupp <sn...@snazy.de>
Authored: Wed Nov 4 23:28:57 2015 +0100
Committer: Robert Stupp <sn...@snazy.de>
Committed: Wed Nov 4 23:28:57 2015 +0100
----------------------------------------------------------------------
CHANGES.txt | 2 +-
bin/cassandra | 49 ++++++++++++++++++++
conf/cassandra-env.sh | 49 --------------------
.../apache/cassandra/service/StartupChecks.java | 19 +++++++-
4 files changed, 68 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/0ff13d2a/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 60bf565..fedede2 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -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)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/0ff13d2a/bin/cassandra
----------------------------------------------------------------------
diff --git a/bin/cassandra b/bin/cassandra
index 8d7b14f..0bbd9fb 100755
--- a/bin/cassandra
+++ b/bin/cassandra
@@ -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"
http://git-wip-us.apache.org/repos/asf/cassandra/blob/0ff13d2a/conf/cassandra-env.sh
----------------------------------------------------------------------
diff --git a/conf/cassandra-env.sh b/conf/cassandra-env.sh
index bb20964..e82198b 100644
--- a/conf/cassandra-env.sh
+++ b/conf/cassandra-env.sh
@@ -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.
http://git-wip-us.apache.org/repos/asf/cassandra/blob/0ff13d2a/src/java/org/apache/cassandra/service/StartupChecks.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StartupChecks.java b/src/java/org/apache/cassandra/service/StartupChecks.java
index 4934dea..8b8810c 100644
--- a/src/java/org/apache/cassandra/service/StartupChecks.java
+++ b/src/java/org/apache/cassandra/service/StartupChecks.java
@@ -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()
{
/**