Skip to content

Commit 8c454c5

Browse files
author
Unknown
committed
Merge branch 'dev'
2 parents e8f9ff9 + 881fa1a commit 8c454c5

17 files changed

+242
-2
lines changed
2.08 MB
Binary file not shown.

Java/并发/AQS/未完待续.txt

Whitespace-only changes.

Java/并发/AQS/配图.pptx

178 KB
Binary file not shown.

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,12 @@ MySQL的Innodb与MyISAM比较、数据库锁、事务流程和原理、索引、
5353
TCP状态变迁图、TCP相关常见问题概念(三次握手,四次挥手),HTTP相关问题概念解析
5454

5555
## 💪方法论
56-
* [架构设计方法论](/方法论/架构设计方法论)
56+
* [架构设计方法](/方法论/架构设计方法)
5757
架构设计相关基本概念、架构设计的目的、设计原则、架构设计基本设计流程等
58-
* [开源项目学习方法论](/方法论/开源项目学习方法论)
58+
* [开源项目学习](/方法论/开源项目学习)
5959
学习开源项目常见错误观点解析,学习的层次,学习的方法步骤介绍
60+
* [Java服务线上应急](/方法论/Java服务线上应急)
61+
线上服务应急流程,问题解决的思路、技巧,常见工具,命令行监控脚本
6062

6163
# 类似github知识库
6264
* [architecture.of.internet-product 互联网公司技术架构,微信/淘宝/微博/腾讯/阿里/美团点评/百度/Google/Facebook/Amazon/eBay的架构](https://github.com/davideuler/architecture.of.internet-product)
Binary file not shown.
252 KB
Loading
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
2+
3+
## @作者: 陈彩华(caison@aliyun.com)
4+
## @创建时间: 2019-02-07
5+
## @功能: 系统基本运行情况监控
6+
## @使用:sh 1_系统基本情况统计.sh
7+
echo
8+
echo
9+
echo -e "\033[33m--------------------------------计算负载------------------------------------------\033[0m"
10+
11+
echo -e "\033[34m[CPU]\033[0m"
12+
iostat -c | awk 'NR==3 || NR==4 {print}'
13+
echo -e "\033[32muser-用户空间CPU时间占比,system-系统空间CPU时间占比\033[0m"
14+
echo -e "\033[32miowait-CPU io等待时间占比,idle-CPU空闲时间占比\033[0m"
15+
16+
echo
17+
echo -e "\033[34m[进程数]\033[0m"
18+
ps -ef|wc -l
19+
20+
21+
echo
22+
23+
24+
echo -e "\033[33m--------------------------------存储负载------------------------------------------\033[0m"
25+
echo -e "\033[34m[内存空间使用]\033[0m"
26+
free -m
27+
echo -e "\033[32m单位-Mb,Mem-物理内存,Swap-虚拟内存\033[0m"
28+
echo -e "\033[32m单位-Mb,total-总内存,available-可用内存\033[0m"
29+
echo
30+
echo -e "\033[34m[磁盘空间使用]\033[0m"
31+
df -h
32+
33+
echo
34+
echo -e "\033[34m[磁盘吞吐率]\033[0m"
35+
iostat -d -m | awk 'NR>2{print}'| awk '/./ {print}'
36+
echo -e "\033[32m单位-Mb,tps-每秒io次数,MB_read/s-每秒读的数据量,MB_wrtn/s-每秒写的数据量\033[0m"
37+
echo
38+
39+
echo -e "\033[34m[文件句柄数]\033[0m"
40+
lsof|awk '{print $2}'|wc -l
41+
echo
42+
43+
echo -e "\033[33m--------------------------------网络负载------------------------------------------\033[0m"
44+
echo -e "\033[34m[TCP连接数]\033[0m"
45+
echo $(netstat -nat|wc -l)
46+
echo
47+
48+
echo -e "\033[34m[端口连接状态]\033[0m"
49+
netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
50+
echo -e "\033[32mLISTEN-监听状态\033[0m"
51+
echo -e "\033[32mCLOSE_WAIT-对方主动关闭连接或者网络异常导致连接中断-状态\033[0m"
52+
echo -e "\033[32mESTABLISHED-正常数据传输状态\033[0m"
53+
echo -e "\033[32mTIME_WAIT-处理完毕等待超时结束状态\033[0m"
54+
echo
55+
56+
echo -e "\033[34m[网卡流量]\033[0m"
57+
sar -n DEV 1 3 |awk 'NR>2 {print}'
58+
echo -e "\033[32mrxpck/s-每秒接收包的数量,txpck/s-每秒发出的包的数量\033[0m"
59+
echo -e "\033[32mrxKB/s-每秒接收的数据量,txKB/s-每秒发出的数据量,单位KB\033[0m"
60+
61+
echo
62+
echo -e "\033[33m--------------------------------参考------------------------------------------\033[0m"
63+
echo -e "\033[32mCPU占用最多的前10个进程:ps auxw|head -1;ps auxw|sort -rn -k3|head -10\033[0m"
64+
echo -e "\033[32m内存消耗最多的前10个进程:ps auxw|head -1;ps auxw|sort -rn -k4|head -10\033[0m"
65+
echo -e "\033[32m虚拟内存使用最多的前10个进程:ps auxw|head -1;ps auxw|sort -rn -k5|head -10\033[0m"
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
2+
## @作者: 陈彩华(caison@aliyun.com)
3+
## @创建时间: 2019-02-07
4+
## @功能: 应用基本情况统计
5+
## @使用:sh 1_应用基本情况统计.sh [进程十进制id]
6+
## @注意:建议使用root权限运行
7+
echo
8+
echo
9+
10+
pid=$1
11+
if [ ! $pid ]
12+
then
13+
echo 输入进程id为空
14+
exit
15+
fi
16+
echo 输入进程id = $pid
17+
18+
19+
echo -e "\033[33m--------------------------------计算负载------------------------------------------\033[0m"
20+
echo -e "\033[34m[近3秒进程CPU使用率]\033[0m"
21+
22+
declare -i counter=0
23+
#use while to loop
24+
while ((counter<3));do
25+
let ++counter
26+
echo $(top -b -n 1 -p $pid 2>&1 | awk -v pid=$pid '{if ($1 == pid)print $9}')
27+
sleep 1
28+
done
29+
echo
30+
31+
echo -e "\033[34m[进程线程数]\033[0m"
32+
ps hH p $pid|wc -l
33+
echo
34+
35+
echo -e "\033[33m--------------------------------存储负载------------------------------------------\033[0m"
36+
echo -e "\033[34m[进程内存空间使用]\033[0m"
37+
echo $(cat /proc/$pid/status|grep -e VmRSS| awk '{print $2/1024 "Mb"}')
38+
echo
39+
40+
41+
echo -e "\033[34m[进程打开文件句柄数]\033[0m"
42+
echo $(lsof -n|awk '{print $2}'|grep -e $pid|uniq -c |awk '{print $1}')
43+
echo
44+
45+
echo -e "\033[33m--------------------------------网络负载------------------------------------------\033[0m"
46+
echo -e "\033[34m[应用TCP连接数]\033[0m"
47+
lsof -p $pid -nP|grep TCP|wc -l
48+
echo
49+
50+
echo -e "\033[34m[端口TCP连接状态]\033[0m"
51+
echo LISTEN $(lsof -p $pid -nP |grep TCP|grep LISTEN|wc -l)
52+
echo CLOSE_WAIT $(lsof -p $pid -nP |grep TCP|grep CLOSE_WAIT|wc -l)
53+
echo ESTABLISHED $(lsof -p $pid -nP |grep TCP|grep ESTABLISHED|wc -l)
54+
echo TIME_WAIT $(lsof -p $pid -nP |grep TCP|grep TIME_WAIT|wc -l)
55+
echo -e "\033[32mLISTEN-监听状态\033[0m"
56+
echo -e "\033[32mCLOSE_WAIT-对方主动关闭连接或者网络异常导致连接中断-状态\033[0m"
57+
echo -e "\033[32mESTABLISHED-正常数据传输状态\033[0m"
58+
echo -e "\033[32mTIME_WAIT-处理完毕等待超时结束状态\033[0m"
59+
echo
60+
echo
61+
62+
echo
63+
echo -e "\033[33m--------------------------------参考------------------------------------------\033[0m"
64+
65+
66+
echo -e "\033[32m jstack 可用于打印线程堆栈信息,注意关注线程阻塞状况\033[0m"
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#!/bin/bash
2+
# @Function
3+
# Find out the highest cpu consumed threads of java, and print the stack of these threads.
4+
#
5+
# @Usage
6+
# $ ./show-busy-java-threads.sh
7+
#
8+
# @author Jerry Lee
9+
10+
PROG=`basename $0`
11+
12+
usage() {
13+
cat <<EOF
14+
Usage: ${PROG} [OPTION]...
15+
Find out the highest cpu consumed threads of java, and print the stack of these threads.
16+
Example: ${PROG} -c 10
17+
18+
Options:
19+
-p, --pid find out the highest cpu consumed threads from the specifed java process,
20+
default from all java process.
21+
-c, --count set the thread count to show, default is 5
22+
-h, --help display this help and exit
23+
EOF
24+
exit $1
25+
}
26+
27+
ARGS=`getopt -n "$PROG" -a -o c:p:h -l count:,pid:,help -- "$@"`
28+
[ $? -ne 0 ] && usage 1
29+
eval set -- "${ARGS}"
30+
31+
while true; do
32+
case "$1" in
33+
-c|--count)
34+
count="$2"
35+
shift 2
36+
;;
37+
-p|--pid)
38+
pid="$2"
39+
shift 2
40+
;;
41+
-h|--help)
42+
usage
43+
;;
44+
--)
45+
shift
46+
break
47+
;;
48+
esac
49+
done
50+
count=${count:-5}
51+
52+
redEcho() {
53+
[ -c /dev/stdout ] && {
54+
# if stdout is console, turn on color output.
55+
echo -ne "\033[1;31m"
56+
echo -n "$@"
57+
echo -e "\033[0m"
58+
} || echo "$@"
59+
}
60+
61+
## Check the existence of jstack command!
62+
if ! which jstack &> /dev/null; then
63+
[ -n "$JAVA_HOME" ] && [ -f "$JAVA_HOME/bin/jstack" ] && [ -x "$JAVA_HOME/bin/jstack" ] && {
64+
export PATH="$JAVA_HOME/bin:$PATH"
65+
} || {
66+
redEcho "Error: jstack not found on PATH and JAVA_HOME!"
67+
exit 1
68+
}
69+
fi
70+
71+
uuid=`date +%s`_${RANDOM}_$$
72+
73+
cleanupWhenExit() {
74+
rm /tmp/${uuid}_* &> /dev/null
75+
}
76+
trap "cleanupWhenExit" EXIT
77+
78+
printStackOfThread() {
79+
while read threadLine ; do
80+
pid=`echo ${threadLine} | awk '{print $1}'`
81+
threadId=`echo ${threadLine} | awk '{print $2}'`
82+
threadId0x=`printf %x ${threadId}`
83+
user=`echo ${threadLine} | awk '{print $3}'`
84+
pcpu=`echo ${threadLine} | awk '{print $5}'`
85+
86+
jstackFile=/tmp/${uuid}_${pid}
87+
88+
[ ! -f "${jstackFile}" ] && {
89+
jstack -F ${pid} > ${jstackFile} || {
90+
redEcho "Fail to jstack java process ${pid}!"
91+
rm ${jstackFile}
92+
continue
93+
}
94+
}
95+
96+
redEcho "The stack of busy(${pcpu}%) thread(${threadId}/0x${threadId0x}) of java process(${pid}) of user(${user}):"
97+
sed "/nid=0x${threadId0x}/,/^$/p" -n ${jstackFile}
98+
done
99+
}
100+
101+
[ -z "${pid}" ] && {
102+
ps -Leo pid,lwp,user,comm,pcpu --no-headers | awk '$4=="java"{print $0}' |
103+
sort -k5 -r -n | head --lines "${count}" | printStackOfThread
104+
} || {
105+
ps -Leo pid,lwp,user,comm,pcpu --no-headers | awk -v "pid=${pid}" '$1==pid,$4=="java"{print $0}' |
106+
sort -k5 -r -n | head --lines "${count}" | printStackOfThread
107+
}
176 KB
Binary file not shown.

0 commit comments

Comments
 (0)