jvisualvm 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. #!/bin/sh
  2. #
  3. # Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
  4. # ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  5. #
  6. # resolve symlinks
  7. #
  8. PRG=$0
  9. while [ -h "$PRG" ]; do
  10. ls=`ls -ld "$PRG"`
  11. link=`expr "$ls" : '^.*-> \(.*\)$' 2>/dev/null`
  12. if expr "$link" : '^/' 2> /dev/null >/dev/null; then
  13. PRG="$link"
  14. else
  15. PRG="`dirname "$PRG"`/$link"
  16. fi
  17. done
  18. progdir=`dirname "$PRG"`
  19. old=`pwd`
  20. cd "$progdir"/..
  21. basedir=`pwd`
  22. cd "$old"
  23. case "`uname`" in
  24. Darwin*)
  25. # set default userdir and cachedir on Mac OS X
  26. DEFAULT_USERDIR_ROOT="${HOME}/Library/Application Support/VisualVM"
  27. DEFAULT_CACHEDIR_ROOT=${HOME}/Library/Caches/VisualVM
  28. ;;
  29. *)
  30. # set default userdir and cachedir on unix systems
  31. DEFAULT_USERDIR_ROOT=${HOME}/.visualvm
  32. DEFAULT_CACHEDIR_ROOT=${HOME}/.cache/visualvm
  33. ;;
  34. esac
  35. if [ -f "$progdir"/../lib/visualvm/etc/visualvm.conf ] ; then
  36. visualvm_jdkhome="$basedir"
  37. old=`pwd`
  38. cd "$progdir/../lib/visualvm/"
  39. basedir=`pwd`
  40. cd "$old"
  41. . "$progdir"/../lib/visualvm/etc/visualvm.conf
  42. elif [ -f "$progdir"/../etc/visualvm.conf ] ; then
  43. . "$progdir"/../etc/visualvm.conf
  44. fi
  45. export DEFAULT_USERDIR_ROOT
  46. # #68373: look for userdir, but do not modify "$@"
  47. userdir="${visualvm_default_userdir}"
  48. cachedir="${visualvm_default_cachedir}"
  49. founduserdir=""
  50. for opt in "$@"; do
  51. if [ "${founduserdir}" = "yes" ]; then
  52. userdir="$opt"
  53. break
  54. elif [ "$opt" = "--userdir" ]; then
  55. founduserdir="yes"
  56. fi
  57. done
  58. foundcachedir=""
  59. for opt in "$@"; do
  60. if [ "${foundcachedir}" = "yes" ]; then
  61. cachedir="$opt"
  62. break
  63. elif [ "$opt" = "--cachedir" ]; then
  64. foundcachedir="yes"
  65. fi
  66. done
  67. if [ -f "${userdir}"/etc/visualvm.conf ] ; then
  68. . "${userdir}"/etc/visualvm.conf
  69. fi
  70. if [ ! -f "$basedir"/etc/visualvm.clusters ]; then
  71. echo Cannot read cluster file: "$basedir"/etc/visualvm.clusters 1>&2
  72. exit 1
  73. fi
  74. readClusters() {
  75. grep -v "^#" "$basedir"/etc/visualvm.clusters | grep -v "^$" | grep -v platform | while read X; do
  76. if expr "$X" : "/.*" >/dev/null; then
  77. echo "$X"
  78. else
  79. echo "$basedir/$X"
  80. fi
  81. done
  82. }
  83. absolutize_paths() {
  84. while read path; do
  85. if [ -d "$path" ]; then
  86. (cd "$path" 2>/dev/null && pwd)
  87. else
  88. echo "$path"
  89. fi
  90. done
  91. }
  92. visualvm_clusters=`readClusters | absolutize_paths | tr '\012' ':'`
  93. if [ ! -z "$visualvm_extraclusters" ] ; then
  94. visualvm_clusters ="$visualvm_clusters:$visualvm_extraclusters"
  95. fi
  96. heap_size () {
  97. mem=640
  98. case "`uname`" in
  99. Linux*)
  100. mem=`cat /proc/meminfo | grep MemTotal | tr -d [:space:][:alpha:]:`
  101. mem=`expr $mem / 1024`
  102. ;;
  103. SunOS*)
  104. mem=`/usr/sbin/prtconf | grep Memory | /usr/bin/tr -dc '[0-9]'`
  105. ;;
  106. Darwin*)
  107. mem=`/usr/sbin/sysctl hw.memsize | tr -d [:alpha:][:space:].:`
  108. mem=`expr $mem / 1048576`
  109. ;;
  110. *)
  111. ;;
  112. esac
  113. if [ -z "$mem" ] ; then
  114. mem=640
  115. fi
  116. mem=`expr $mem / 5`
  117. if [ $mem -gt 1024 ] ; then
  118. mem=1024
  119. elif [ $mem -lt 96 ] ; then
  120. mem=96
  121. fi
  122. max_heap_size=$mem
  123. return 0
  124. }
  125. if grep -v -- "-J-Xmx" >/dev/null <<EOF ; then
  126. ${visualvm_default_options}
  127. EOF
  128. heap_size
  129. visualvm_default_options="-J-Xmx${max_heap_size}m ${visualvm_default_options}"
  130. fi
  131. launchNbexec() {
  132. nbexec=`grep -v "^#" "$basedir"/etc/visualvm.clusters | grep -v "^$" | grep platform | while read X; do
  133. if expr "$X" : "/.*" >/dev/null; then
  134. echo $X/lib/nbexec
  135. elif [ -f "$basedir"/$X/lib/nbexec ]; then
  136. echo "$basedir"/$X/lib/nbexec
  137. fi
  138. done | head -n 1`
  139. if [ \! -n "$nbexec" ] ; then
  140. nbexec="$basedir"/platform/lib/nbexec
  141. fi
  142. sh=sh
  143. # #73162: Ubuntu uses the ancient Bourne shell, which does not implement trap well.
  144. if [ -x /bin/bash ]
  145. then
  146. sh=/bin/bash
  147. fi
  148. if [ "${founduserdir}" = "yes" ]; then
  149. exec $sh "$nbexec" "$@"
  150. else
  151. if [ "${foundcachedir}" = "yes" ]; then
  152. exec $sh "$nbexec" --userdir "${userdir}" "$@"
  153. else
  154. exec $sh "$nbexec" --userdir "${userdir}" --cachedir "${cachedir}" "$@"
  155. fi
  156. fi
  157. }
  158. # in case of macosx, the apple.laf.useScreenMenuBar property should be ideally in the Info.plist file
  159. # but it doesn't get propagated into the executed java VM.
  160. case "`uname`" in
  161. Darwin*)
  162. eval launchNbexec \
  163. --jdkhome '"$visualvm_jdkhome"' \
  164. -J-Xdock:name=VisualVM \
  165. '"-J-Xdock:icon=$basedir/etc/visualvm.icns"' \
  166. --branding visualvm \
  167. --clusters '"$visualvm_clusters"' \
  168. ${visualvm_default_options} \
  169. '"$@"'
  170. ;;
  171. *)
  172. eval launchNbexec \
  173. --jdkhome '"$visualvm_jdkhome"' \
  174. --branding visualvm \
  175. --clusters '"$visualvm_clusters"' \
  176. ${visualvm_default_options} \
  177. '"$@"'
  178. ;;
  179. esac