`
alwaysnew
  • 浏览: 29093 次
  • 性别: Icon_minigender_1
  • 来自: 肇庆
社区版块
存档分类
最新评论

排查占用资源java代码脚本

 
阅读更多

show-busy-java-threads.sh(摘自:https://github.com/oldratlee/useful-scripts/blob/master/show-busy-java-threads.sh)

 

 

#!/bin/bash
  # @Function
  # Find out the highest cpu consumed threads of java, and print the stack of these threads.
  #
  # @Usage
  # $ ./show-busy-java-threads.sh
  #
  # @author Jerry Lee
   
  readonly PROG=`basename $0`
  readonly -a COMMAND_LINE=("$0" "$@")
   
  usage() {
  cat <<EOF
  Usage: ${PROG} [OPTION]...
  Find out the highest cpu consumed threads of java, and print the stack of these threads.
  Example: ${PROG} -c 10
   
  Options:
  -p, --pid find out the highest cpu consumed threads from the specifed java process,
  default from all java process.
  -c, --count set the thread count to show, default is 5
  -h, --help display this help and exit
  EOF
  exit $1
  }
   
  readonly ARGS=`getopt -n "$PROG" -a -o c:p:h -l count:,pid:,help -- "$@"`
  [ $? -ne 0 ] && usage 1
  eval set -- "${ARGS}"
   
  while true; do
  case "$1" in
  -c|--count)
  count="$2"
  shift 2
  ;;
  -p|--pid)
  pid="$2"
  shift 2
  ;;
  -h|--help)
  usage
  ;;
  --)
  shift
  break
  ;;
  esac
  done
  count=${count:-5}
   
  redEcho() {
  [ -c /dev/stdout ] && {
  # if stdout is console, turn on color output.
  echo -ne "\033[1;31m"
  echo -n "$@"
  echo -e "\033[0m"
  } || echo "$@"
  }
   
  yellowEcho() {
  [ -c /dev/stdout ] && {
  # if stdout is console, turn on color output.
  echo -ne "\033[1;33m"
  echo -n "$@"
  echo -e "\033[0m"
  } || echo "$@"
  }
   
  blueEcho() {
  [ -c /dev/stdout ] && {
  # if stdout is console, turn on color output.
  echo -ne "\033[1;36m"
  echo -n "$@"
  echo -e "\033[0m"
  } || echo "$@"
  }
   
  # Check the existence of jstack command!
  if ! which jstack &> /dev/null; then
  [ -z "$JAVA_HOME" ] && {
  redEcho "Error: jstack not found on PATH!"
  exit 1
  }
  ! [ -f "$JAVA_HOME/bin/jstack" ] && {
  redEcho "Error: jstack not found on PATH and $JAVA_HOME/bin/jstack file does NOT exists!"
  exit 1
  }
  ! [ -x "$JAVA_HOME/bin/jstack" ] && {
  redEcho "Error: jstack not found on PATH and $JAVA_HOME/bin/jstack is NOT executalbe!"
  exit 1
  }
  export PATH="$JAVA_HOME/bin:$PATH"
  fi
   
  readonly uuid=`date +%s`_${RANDOM}_$$
   
  cleanupWhenExit() {
  rm /tmp/${uuid}_* &> /dev/null
  }
  trap "cleanupWhenExit" EXIT
   
  printStackOfThreads() {
  local line
  local count=1
  while IFS=" " read -a line ; do
  local pid=${line[0]}
  local threadId=${line[1]}
  local threadId0x="0x`printf %x ${threadId}`"
  local user=${line[2]}
  local pcpu=${line[4]}
   
  local jstackFile=/tmp/${uuid}_${pid}
   
  [ ! -f "${jstackFile}" ] && {
  {
  if [ "${user}" == "${USER}" ]; then
  jstack ${pid} > ${jstackFile}
  else
  if [ $UID == 0 ]; then
  sudo -u ${user} jstack ${pid} > ${jstackFile}
  else
  redEcho "[$((count++))] Fail to jstack Busy(${pcpu}%) thread(${threadId}/${threadId0x}) stack of java process(${pid}) under user(${user})."
  redEcho "User of java process($user) is not current user($USER), need sudo to run again:"
  yellowEcho " sudo ${COMMAND_LINE[@]}"
  echo
  continue
  fi
  fi
  } || {
  redEcho "[$((count++))] Fail to jstack Busy(${pcpu}%) thread(${threadId}/${threadId0x}) stack of java process(${pid}) under user(${user})."
  echo
  rm ${jstackFile}
  continue
  }
  }
  blueEcho "[$((count++))] Busy(${pcpu}%) thread(${threadId}/${threadId0x}) stack of java process(${pid}) under user(${user}):"
  sed "/nid=${threadId0x} /,/^$/p" -n ${jstackFile}
  done
  }
   
   
  ps -Leo pid,lwp,user,comm,pcpu --no-headers | {
  [ -z "${pid}" ] &&
  awk '$4=="java"{print $0}' ||
  awk -v "pid=${pid}" '$1==pid,$4=="java"{print $0}'
  } | sort -k5 -r -n | head --lines "${count}" | printStackOfThreads
分享到:
评论

相关推荐

    java服务器资源监控脚本.zip

    监控脚本可以实时收集CPU利用率数据,帮助我们发现可能的性能瓶颈,如CPU密集型任务、资源争抢等,并及时调整应用配置或优化代码。 3. **网络性能检查**: 网络是应用通信的基础,其性能直接影响到服务的可用性和...

    JAVA手机游戏编程源代码

    3. **Android游戏框架**:许多Java游戏开发使用特定的游戏框架,如LibGDX、Unity(支持Java脚本)等,这些框架提供了图形渲染、物理引擎、音频处理等功能,简化游戏开发流程。 4. **图形和动画**:游戏中的视觉元素...

    jar重启脚本.rar

    6. **错误处理和重试机制**:为了增加脚本的健壮性,可能会包含错误处理代码,如果启动失败,脚本可能会有重试机制或者发送报警通知。 "描述"中提到的"说明文档.docx"是一个重要的参考资料,它详细解释了如何使用和...

    java IBM websphere 内存溢出 javacore deapdump CPU内存分析工具

    总结来说,面对Java IBM WebSphere的内存溢出问题,我们需要结合`javacore`和`deapdump`等诊断工具,通过分析脚本和相关库文件,理解内存管理原理,调整JVM配置,并优化代码,才能有效地排查和解决问题。

    运维脚本

    运维脚本主要用于执行日常的系统管理任务,如监控、备份、更新、故障排查等,通过编写脚本,我们可以将一系列命令组合在一起,形成一个可重复执行的任务流程。 一、脚本语言基础 运维脚本通常使用Shell(如bash、sh...

    show-busy-java-threads.sh文件

    `show-busy-java-threads.sh`脚本就是为了帮助开发者快速定位和排查这类性能问题而设计的。这个脚本主要用于监控并展示Java应用程序中的繁忙线程,从而帮助我们理解程序的执行状态,找出可能导致高CPU负载的原因。 ...

    JAVA对象所占内存大小计算例子

    本文将深入探讨如何计算Java对象所占内存,并通过提供的代码示例进行详细解析。 首先,我们需要理解Java对象内存占用的基本原理。每个Java对象都由三部分组成:对象头(Object Header)、实例数据(Instance Data)...

    JavaJs.zip

    开发者可以通过异步加载资源、减少不必要的DOM操作等方式优化JavaScript代码,同时,定期调用`WebView.clearCache()`和`WebView.clearHistory()`可以清理缓存,提升性能。 7. **调试工具**: 使用Chrome开发者工具...

    Myeclipse patch java 资源文件.zip

    【Myeclipse Patch Java 资源文件】是针对Myeclipse集成开发环境的一个优化工具集合,配合Java环境和Tomcat服务器的安装包,旨在帮助用户更高效地管理和使用Myeclipse。在这个压缩包中,虽然没有包含完整的Myeclipse...

    java程序写入服务

    3. **资源管理**:合理配置JVM参数,避免内存泄漏或资源占用过高。 4. **权限设置**:确保服务运行时具有必要的文件读写和网络访问权限。 5. **守护进程**:在Linux系统中,可以使用`nohup`或`screen`命令确保程序...

    show-busy-java-threads-jvm-cpu.rar

    `show-busy-java-threads.sh` 文件提供了一个实用的脚本,帮助我们查看那些导致Linux系统CPU占用率升高的Java线程。 首先,让我们了解什么是JVM。JVM(Java Virtual Machine)是Java程序的运行环境,它负责解释和...

    Arthas - Java 诊断利器.docx

    - `console`命令:打开一个交互式的脚本执行环境,可以直接运行Java代码。 - ` watch`, `update`, `execute`等命令:用于动态修改运行中的类或者方法。 Arthas的灵活性和强大功能使其成为Java开发者必备的工具之一...

    Java线程检测和数据收集工具

    总结,`jps`和`jstack`是Java开发和运维中的有力工具,结合Shell脚本实现定时收集,可以有效监控和排查Java应用的问题。通过深入了解并熟练运用这些工具,开发者可以更好地理解和管理他们的Java应用程序。

    Java安全性编程实例

    7. **防止内存泄漏**:合理的对象生命周期管理和内存回收策略,防止恶意代码占用过多系统资源。 8. **日志和审计**:记录程序运行时的关键事件,便于分析和排查安全问题。 9. **使用最新版本的Java**:及时更新...

    解决 linux 下 buffcache 占用过高的问题.docx

    在标题和描述中提到的问题,即"Linux下buff/cache占用过高",这是一个常见的系统性能优化问题,尤其是对于运行Java应用或者其他资源密集型服务的云服务器而言。这里我们将深入探讨buff/cache的作用、为何会占用过多...

    Java文件同步开源项目Sync

    在项目中,包含了源代码和编译后的jar文件,使得用户不仅可以直接使用预编译的二进制版本,也可以根据需要修改源码并重新构建。 Sync项目的核心特性包括: 1. **双向同步**:Sync支持双向同步,这意味着它可以同时...

    jmeter+linux资源监控

    JMeter是Apache项目的一个开源工具,主要用于负载和性能测试,可以用于测试静态和动态资源,如静态文件、Java Servlets、CGI脚本、Java对象、数据库和FTP服务器等。在Linux环境中,监控资源对于优化应用性能和排查...

    记一次tomcat进程cpu占用过高的问题排查记录

    1. **CPU占用过高问题排查**:当遇到Java应用(如Tomcat)CPU占用过高时,通常会使用`jps`找到JVM进程,`jstack`分析线程状态,`jstat`监控JVM内存和垃圾收集情况。 2. **log4j死锁问题**:log4j 1.x版本可能存在...

    Java 面试问题Java 面试问题示例

    Java是一种广泛使用的高级编程语言,由Sun Microsystems(现在是Oracle公司的一部分)开发,以其“一次...解决这些问题通常需要深入理解Java内存模型、线程同步机制、SQL优化等,并利用各种调试工具进行排查和优化。

    Linux中使用Shell脚本查看Java线程的CPU使用情况

    线上Java应用,在业务高峰期的时候经常出现CPU跑高,需要查看实时的线程占用cpu情况,下面是一个很好用的脚本,可以快速导出每个线程的占用CPU情况,结合jstack日志,排查到具体的线程类名。 一、首先获得jvm的进程...

Global site tag (gtag.js) - Google Analytics