Linux学习笔记

java stack--dump-jstack.sh

#!/bin/sh

if [ "x$JAVA_BIN" = "x" ];then
for jps_path in `find / -name jps`
do
JAVA_BIN=`dirname $jps_path`
done
fi

echo "JAVA_HOME: "$JAVA_BIN
if [ "x$JAVA_BIN" = "x" ];then
echo "JAVA_HOME can not be find."
exit 1
fi

LOG=./jstack.log

if [ $# -lt 2 ]; then
echo "Usage: dump-jstack.sh pid -c count [-i interval] [-m jstack -m]"
exit 1
fi

pid=$1
shift

declare -i count=5
interval=10
tdn=""

while [ $# -gt 0 ]; do
case $1 in
-c ) # count
count=$2
shift 2
;;
-i ) # interval
interval=$2;
shift 2
;;
-m ) # jstack -m
tdn="m"
shift 2
;;
* ) # ignore other params
shift
;;
esac
done
echo "$JAVA_BIN/jstack -l $pid $tdn >> $LOG"
while [ $count -gt 0 ]; do
$JAVA_BIN/jstack -l "$pid" $tdn >> $LOG
count=`expr $count-1`

if [ $count -gt 0 ]; then
sleep $interval
fi
done

性能问题排查:

Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。
内存资源占用:free命令

IO占用:
iostat -d -k 1 10 #查看TPS和吞吐量信息
iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
iostat -c 1 10 #查看cpu状态

磁盘使用量统计:
df -lh
du -h /mnt/disk1/hdh/
du -sh *

CPU、磁盘、网络使用统计:
dstat

当前TCP连接数查看:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

Linux系统缓存释放:
echo 3 > /proc/sys/vm/drop_caches

查看Linux下安装的服务:
chkconfig --list

关闭swap:
SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用。
要关闭swap,执行以下步骤。
1)
# swapoff –a
# sysctl vm.swappiness=0
2)
编辑/etc/sysctl.conf,增加以下内容:
vm.swappiness=0
3)
再执行:
sysctl –p
要确认swap是否已关闭。执行以下命令,如果swap成功关闭,则返回0
cat /proc/sys/vm/swappiness

Linux下.和..
. / 有空格的点号等同于source命令,表示在当前shell环境执行后面的命令或脚本(不加点号默认是新开一个shell执行的)。例如 . /home/test.sh 等同于 source /home/test.sh。
用source执行的脚本所做的任何改变会影响当前shell(如其中有用cd改变目录,脚本执行完后目录就变掉了);如果没用source,就不会影响当前shell。

以. (空格)运行的子Shell,在子Shell中执行exit命令时,也会退出父Shell

. ./test.sh
表示以source方式在当前shell执行当前目录下的test.sh脚本。

Linux下CPU信息查看
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

远程执行脚本
ssh [-p $port] [$user@]$ip 'cmd'
$port : ssh连接端口号
$user: ssh连接用户名
$ip:ssh连接的ip地址
cmd:远程服务器需要执行的操作
ssh的-t参数
可以提供一个远程服务器的虚拟tty终端,加上这个参数我们就可以在远程服务器的虚拟终端上输入自己的提权密码了,非常安全

linux中shell变量$#,$@,$0,$1,$2的含义解释:
变量说明:
$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

Shell中 (. file.sh)相当于souce 或者include引入函数(库)的意思

数组遍历:
array=(element1 element2 element3 .... elementN)
#echo ${array[0]}
for data in ${array[@]}
do
echo ${data}
done

脚本相对路径
脚本执行的相对路径是相对当前目录的路径,而不是脚本所在目录的路径

服务路径
/etc/rc.d/init.d/network restart

替换
:%s/lark001/hadoop17/g
:%s/lark002/hadoop19/g
:%s/lark003/hadoop20/g

exit命令

exit - cause the shell to exit

问题

device is busy

在Linux中,有时使用umount命令去卸载磁盘disk(n),可能出现umount: xxx: device is busy的情况

可以借助fuser命令找出占用目录disk(n)的所有进程,然后kill掉

fuser -m /mnt/disk(n)

关于fuser,它是用来显示所有正在使用着指定的file, file system 或者 sockets的进程信息。它通常被用在诊断系统的“resource busy”问题,通常是在你希望umount指定的挂载点得时候遇到。如上所示,使用选项-m,用来查找所有正在使用disk(n)挂载点的所有进程

mdadm软RAID的删除方法和注意事项
1. 查询各磁盘的RAID情况
首先通过lsblk命令查看各磁盘软mdadm RAID的情况,将其中TYPE为raid的磁盘和md类型记录下来,准备做删除处理。
2. 删除软RAID
如:发现有五个磁盘做了md0的软RAID,则做如下命令操作:
① 先将五个盘按如下命令做删除操作,删除RAID中的所有设备
mdadm /dev/md0 --fail /dev/sdb --remove /dev/sdb
mdadm /dev/md0 --fail /dev/sdc --remove /dev/sdc
mdadm /dev/md0 --fail /dev/sdd --remove /dev/sdd
mdadm /dev/md0 --fail /dev/sde --remove /dev/sde
mdadm /dev/md0 --fail /dev/sdf --remove /dev/sdf
注:md的类型要根据实际情况改写,此处为md0
② 将md0停止并移除,停止该RAID
mdadm --stop /dev/md0
mdadm --remove /dev/md0
③ 继续对以上五个磁盘作如下操作:
mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdd
mdadm --misc --zero-superblock /dev/sde
mdadm --misc --zero-superblock /dev/sdf
④ 为了防止系统启动时候启动raid,如果存在则删除以下文件
rm -f /etc/mdadm.conf
rm -f /etc/raidtab

原文地址:https://www.cnblogs.com/warmingsun/p/5720937.html