十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
仍然需要生成jvm进程的thread dump data,便于与Linux top命令输出关联。步骤如下:
公司主营业务:成都网站设计、做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出瑞金免费做网站回馈大家。
1)执行top命令,或使用-H选项(显示所有线程),找到相关的高CPU的PID
2)生成thread dump 快照(kill -3 PID)。
3)将top命令输出PID转换为HEX格式(16进制)
4)在thread dump data中搜索nid=Hex PID
5)分析受影响的thread和stack trace,精确定位代码。
top output sample
[plain] view plain copy
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
...........
22111 userWLS 9 0 86616 84M 26780 S 0.0 40.1 0:00 java
Linux 使用jstat命令查看jvm的GC情况
命令格式
jstat命令命令格式:
jstat [Options] vmid[interval] [count]
参数说明:
Options,选项,我们一般使用 -gcutil 查看gc情况
vmid
,VM的进程号,即当前运行的java进程号
interval
,间隔时间,单位为秒或者毫秒
count
,打印次数,如果缺省则打印无数次
示例说明
示例
通常运行命令如下:
jstat -gc 12538 5000
即会每5秒一次显示进程号为12538的java进成的GC情况,
显示内容如下图:
结果说明
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C
:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U
:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U
:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC
:年轻代中Eden(伊甸园)的容量 (字节)
EU
:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC
:Old代的容量 (字节)
OU
:Old代目前已使用空间 (字节)
PC
:Perm(持久代)的容量 (字节)
PU
:Perm(持久代)目前已使用空间 (字节)
YGC
:从应用程序启动到采样时年轻代中gc次数
YGCT
:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC
:从应用程序启动到采样时old代(全gc)gc次数
FGCT
:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT
:从应用程序启动到采样时gc用的总时间(s)
NGCMN
:年轻代(young)中初始化(最小)的大小 (字节)
NGCMX
:年轻代(young)的最大容量 (字节)
NGC
:年轻代(young)中当前的容量 (字节)
OGCMN
:old代中初始化(最小)的大小 (字节)
OGCMX
:old代的最大容量 (字节)
OGC
:old代当前新生成的容量 (字节)
PGCMN
:perm代中初始化(最小)的大小 (字节)
PGCMX
:perm代的最大容量 (字节)
PGC
:perm代当前新生成的容量 (字节)
S0
:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1
:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E
:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O
:old代已使用的占当前容量百分比
P
:perm代已使用的占当前容量百分比
S0CMX
:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S1CMX
:年轻代中第二个survivor(幸存区)的最大容量 (字节)
ECMX
:年轻代中Eden(伊甸园)的最大容量 (字节)
DSS
:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
TT
: 持有次数限制
MTT
: 最大持有次数限制
$ ps -ef f | grep proftpdnobody 23117 1 0 Dec23 ? S 0:00 proftpd: (accepting connections)jack 23121 23117 0 Dec23 ? S 7:57 /_ proftpd: jack - ftpsrv: IDLEjack 28944 23117 0 Dec23 ? S 4:56 /_ proftpd: jack - ftpsrv: IDLE这样就可...
Linux安装JDK步骤1. 先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm)
,推荐SUN的官方网站,下载后放在/home目录中,当然其它地方也行。
进入安装目录
#cd /home
#cp jdk-1_5_0_02-linux-i586.rpm /usr/local
#cd /usr/local
给所有用户添加可执行的权限
#chmod +x jdk-1_5_0_02-linux-i586.rpm.bin
#./jdk-1_5_0_02-linux-i586.rpm.bin
此时会生成文件jdk-1_5_0_02-linux-i586.rpm,同样给所有用户添加可执行的权限
#chmod +x jdk-1_5_0_02-linux-i586.rpm
安装程序
#rpm -ivh jdk-1_5_0_02-linux-i586.rpm
出现安装协议等,按接受即可。
Linux安装JDK步骤2.设置环境变量。
#vi /etc/profile
在最后面加入
#set java environment
JAVA_HOME=/usr/java/jdk-1_5_0_02
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
保存退出。
要使JDK在所有的用户中使用,可以这样:
vi /etc/profile.d/java.sh
在新的java.sh中输入以下内容:
#set java environment
JAVA_HOME=/usr/java/jdk-1_5_0_02
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
保存退出,然后给java.sh分配权限:chmod 755 /etc/profile.d/java.sh
Linux安装JDK步骤3.在终端使用echo命令检查环境变量设置情况。
#echo $JAVA_HOME
#echo $CLASSPATH
#echo $PATH
4.检查JDK是否安装成功。
#java -version
如果看到JVM版本及相关信息,即安装成功!
vmstat 和 pidstat。vmvmstat 可查看系统总体的指标,pidstat则详细到每一个进程服务的指标
Swap 其实就是把一块磁盘空间或者一个本地文件,当成内存来使用。swap 换出,把进程暂时不用的内存数据存储到磁盘中,并释放这些数据占用的内存。swap 换入,在进程再次访问这些内存的时候,把它们从磁盘读到内存中来
当一个网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列中;然后通过硬中断,告诉中断处理程序已经收到了网络包。接着,网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中;然后再通过软中断,通知内核收到了新的网络帧。内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧