《运维--PlayBook》更新中.......!请访问: https://ops.cnmysql.com
【linux下各种监控小工具】
iotop 监控进程io
monit 监控系统进程
mtr 路由跟踪
ntop 监控网络流程
iftop 端口流量监控工具
nethogs 进程流量监控
iptraf 网络流量实时监控工具
tuned/tuned-adm 工具动态调优系统
glances Linux系统资源监控工具
NICSTAT linux网卡监控
htop linux下交互式进程浏览器
ngxtop nginx监控利器
dstat 性能监控利器
pidstat 监控全部或指定进程占用系统资源的情况
blktrace 统计磁盘块I/O访问频率
http://www.slideshare.net/brendangregg/linux-performance-analysis-and-tools
【mysql导出指定行数据】
mysqldump -uxxx -pxxx dbname tablename -w "id=xxx" > xxx.sql
【screen命令】
ssh中断后shell或者命令也不会中断
yum -yinstall screen
screen -S test ----创建一个test回话
curl -O http://mirror.bit.edu.cn/centos/5/isos/x86_64/CentOS-5.10-x86_64-bin-2of9.iso --下载镜像
ctrl+a后ctrl+d ----保留当前会话切换到其他会话
screen -ls ----查看执行的会话
screen -r id ----切换到指定会话
screen -D -r id -----ssh中断后切换,踢掉占用进入会话
【查看进程的启动目录】
pwdx pid
【vim删除一段话】
vi txt
v 进入可视模式,选择后del
【线程死锁调试】
jstack pid ====针对java进程
pstack pid ====所有线程
gdb调试 C 和 C++ 程序的调试器。
【查找目录文件字符串】
grep name -rl /usr/local/
【卸载包时报错】
[root@localhost log]# rpm -qa | grep libevent
libevent-1.4.13-1
libevent-devel-1.4.13-1
libevent-devel-1.4.13-1
libevent-1.4.13-1
[root@localhost log]# rpm -e libevent
error: "libevent" specifies multiple packages
解决办法
造成这个问题的主要原因是套件被重複 (强制) 安装了两次以上.
尝试了--nodeps, --force, --justdb都不行。结果碰巧解决!
通过man rpm,发现--allmatches应该可以解决这个问题.
[root@testserver openssl-0.9.8l]# rpm -e --allmatches --nodeps libevent*
[root@testserver openssl-0.9.8l]# rpm -qa | grep libevent
【查看当前系统连接数】
#netstat -na | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
脚本分段解释:
netstat -na #显示当前系统中所有的连接信息,并将连接的端口号显示出来
| awk #将前面获取到的内容传递给awk进行处理
‘/^tcp/ #匹配以tcp开头的行
{++S[$NF]} #定义一个数组S,键为内容的最后一列,这里如ESTABLISHED,TIME-WAIT等,对应的值是键值出现的次数
END {for(a in S) #前面计数完成之后循环此数组,a为键,S[a]为值
print a, S[a]} #打印键名和键值
以上的命令就能很清晰的得出系统的连接状态:
CLOSE_WAIT 337
ESTABLISHED 975
SYN_RECV 256
LISTEN 6
【tracert路由时有的路由限制icmp包可以用tcptraceroute进行路由跟踪】
yum install tcptraceroute
tcptraceroute 域名或者IP
tcptraceroute 域名或者IP
【如何在Linux中发现IP地址冲突】
yum install arp-scan
arp-scan –I eth0 -l
arp-scan –I eth0 -l
【查看linx错误代码意思】
perror code
【resolv.conf重启清空问题】
在/etc/resolv.conf中增加dns地址,重启网卡服务后,文件内容被清空。
解决办法:
关闭NetworkManager服务
/etc/init.d/NetworkManager stop
vim /etc/resolv.conf
修改或新增dns地址:
nameserver xxx.xxx.xxx.xxx
/etc/init.d/network restart
chkconfig NetworkManager off
vim /etc/resolv.conf
修改或新增dns地址:
nameserver xxx.xxx.xxx.xxx
/etc/init.d/network restart
chkconfig NetworkManager off
【linux修改时区】
/usr/share/zoneinfo ----时区文件
/etc/sysconfig/clock ----时区
rm -fr /etc/localtime
cp /usr/share/zoneinfo/Brazil/East /etc/localtime
vi /etc/sysconfig/clock
ZONE="Asia/Shanghai"
UTC=false
ARC=false
ZONE="Brazil/East"
UTC=false
ARC=false
/usr/sbin/ntpdate ntp.api.bz;/usr/sbin/hwclock -w
cp /usr/share/zoneinfo/Brazil/East /etc/localtime
vi /etc/sysconfig/clock
ZONE="Asia/Shanghai"
UTC=false
ARC=false
ZONE="Brazil/East"
UTC=false
ARC=false
/usr/sbin/ntpdate ntp.api.bz;/usr/sbin/hwclock -w
【linux系统中文字符集】
locale -a ----查看已经安装的字符集
env | grep LANG 或者 locale ------查看当前系统使用的字符集
修改整个系统的字符集
vi /etc/environment --> LANG=Zh_CN
修改单个用户的字符集
vi .profile --> EXPORT LANG=xxx
【AWK合并行】
awk '{if (NR%4==0){print $0} else {printf"%s ",$0}}'
【删除乱码文件】
ls -i ----查看乱码文件的i节点
find . -inum 17956913 -exec rm {} \; 删除
find . -inum 17956913 -exec mv {} file.txt \; 改名
find . -inum 17956913 -exec rm {} \; 删除
find . -inum 17956913 -exec mv {} file.txt \; 改名
【下载日志发邮件】
yum install mutt
echo "内容" | mutt -a 附件 -s "主题" 邮件地址
echo "内容" | mutt -a 附件 -s "主题" 邮件地址
mailq ----查看邮件队列
报错信息 (host map: lookup (domain.com): deferred) 因为senmail反向解析的事
解决办法:
# vim /etc/mail/sendmail.cf
找到 #O ResolverOptions=+AAONLY 这一行信息,并把它的注释去掉。
# /etc/init.d/sendmail restart
找到 #O ResolverOptions=+AAONLY 这一行信息,并把它的注释去掉。
# /etc/init.d/sendmail restart
【mysqlbinlog: unknown variable 'default-character-set=utf8'】
解决办法:
1、mysqlbinlog --no-defaults
2、my.cnf中client选项里面注释efault-character-set=utf8
【This function has none of DETERMINISTIC, NO SQL解决办法 】
备份存储过程和函数使用-R参数
导入函数报错是因为开启了binlog日志
解决办法是
show variables like 'log_bin_trust_function_creators'; 查看log_bin_trust_function_creators是否开启
set global log_bin_trust_function_creators=1; 开启log_bin_trust_function_creators
或者log_bin_trust_function_creators=1 添加到my.cnf里面
set global log_bin_trust_function_creators=1; 开启log_bin_trust_function_creators
或者log_bin_trust_function_creators=1 添加到my.cnf里面
link: http://blog.chinaunix.net/uid-20639775-id-3031821.html
【rsync 预览不同步】
rsync -nvr --progress /home/* test@ip::res
-n --显示那些文件将被传输
-v --详细输出模式
-r --目录递归模式
-n --显示那些文件将被传输
-v --详细输出模式
-r --目录递归模式
【同步】
rsync -avz --progress /home/* test@ip::res
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H)
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H)
【tar指定文件列表打包】
tar -czv -T filelist -f /backup.tar.gz
tar -czv -T filelist backup.tar.gz
tar -czv -T filelist backup.tar.gz
【mysql复制延迟】
stop slave io_thread; -------从服务器上停止io线程
stop slave sql_thread; -------从服务器上停止sql线程
主:IO线程
从:IO和SQL线程
复制延迟实现办法:利用脚本停止从服务器的sql线程,任务计划再启动sql线程来达到从服务器的复制延迟
【SED删除匹配行】
#sed -i "/route add -net/d" /etc/rc.local
【### RPM通过源码制作rpm包##########】
2.如何安装.src.rpm软件包
有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时
需要进行编译。这类软件包有两种安装方法,
方法一:
1.执行rpm -i your-package.src.rpm
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp your-package.specs 一个和你的软件包同名的specs文件
4. cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
5. ./configure 这一步和编译普通的源码软件一样,可以加上参数
6. make
7. make install
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp your-package.specs 一个和你的软件包同名的specs文件
4. cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
5. ./configure 这一步和编译普通的源码软件一样,可以加上参数
6. make
7. make install
方法二:
1.执行rpm -i you-package.src.rpm
2. cd /usr/src/redhat/SPECS
前两步和方法一相同
3. rpmbuild -bb your-package.specs 一个和你的软件包同名的specs文件
这时,在/usr/src/redhat/RPM/i386/ (根据具体包的不同,也可能是i686,noarch等等)
在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。
执行rpm -i new-package.rpm即可安装完成。
【yum设置从那个源安装文件】
yum --enablerepo=name update php
【打开core文件】
ulimit -c
sed -i "s/ulimit -S -c 0/ulimit -S -c unlimited/g" /etc/profile
source /etc/profile
cat /etc/profile | grep ulim
ulimit -c
ulimit -c unlimited ------打开core文件生成,但是只对当前会话起作用
sed -i "s/ulimit -S -c 0/ulimit -S -c unlimited/g" /etc/profile
source /etc/profile
cat /etc/profile | grep ulim
ulimit -c
ulimit -c unlimited ------打开core文件生成,但是只对当前会话起作用
【perror看系统报错信息】
[root@www ~]$ perror 30
OS error code 30: Read-only file system
OS error code 30: Read-only file system
【tar实现增量、差量备份】
命令基本格式是: tar cvzf TARGET SOURCES -N TIME e.g tar cvzf foo.tgz /bak -N “2004-03-03 16:49:17″
记住全备份的时间f_time和上一次增量备份的时间i_time;(现在的办法是以job为单位记录这两个时间: ” [JobName] [F_TIME] [I_TIME] ‘\n’ “)
全备份: tar cvzf foo.tgz /bak
增量备份: tar cvzf foo.tgz /bak -N i_time
差量备份: tar cvzf foo.tgz /bak -N f_time
【mysql修复表】
mysqlcheck -c log_db_10040 ---检查数据库那个表损坏
repair table tablename; ---修复表
check table tablename; ---检查表是否损坏
repair table tablename; ---修复表
check table tablename; ---检查表是否损坏
【pmap查看进程占用内存】
pmap pid
mtr
ntop
iftop 流量监控工具
nethogs 进程流量监控
yum install iptraf
iftop查看某个端口流量
【linux显示IP来源的工具】
wget http://qqwry.googlecode.com/files/nali-0.1.tar.gz
./configure && make && make install
mtr 210.51.163.180 | nali
./configure && make && make install
mtr 210.51.163.180 | nali
【dump进程内存切片】
jmap -dump:live,format=b,file=文件名 进程ID
jmap -dump:live,format=b,file=14963.bin 14963
jmap -dump:live,format=b,file=14963.bin 14963
【vi里面替换】
:% s/false/true/g
【.消除vim中的^M的几种方法】
1)dos2uninx filename
2)sed -e 's/^M//' filename
3)vim中 :s/^M//gc
2)sed -e 's/^M//' filename
3)vim中 :s/^M//gc
【找出消耗内存最多的前10名进程】
# ps -auxf | sort -nr -k 4 | head -10
【找出使用CPU最多的前10名进程】
# ps -auxf | sort -nr -k 3 | head -10
【清空linux buffer cache】
sync && echo 3 > /proc/sys/vm/drop_caches
【查看端口进程id】
pidof mysql
【linux下踢人下线】
pkill -kill -t tty
【swap空间释放】
swapon -s ---查看swap分区挂载点
swapoff /dev/sda2 --释放swap
swapon -a --开启swap
【查看服务器型号和序列号】
dmidecode -t 1
命令1:dmidecode –t 1(获取所有信息)
命令2:dmidecode -s system-serial-number(是数字)
【删除某个日期之前的binlog】
PURGE MASTER LOGS BEFORE '2014-04-01 00:00:00';
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00';
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
reset master; ----清除所有的binlog
【mysql默认支持innodb】
1、vi /etc/my.cnf在mysqld下添加如下一行
default-storage-engine=InnoDB
2、删除innodb数据文件
rm -rf ibdata1
rm -rf ib_logfile0
rm -rf ib_logfile1
rm -rf ib_logfile2
3、重启mysql
show variables like '%storage_engine%'; ---查看默认存储引擎
show engines; ---查看默认存储引擎
show variables like '%innodb%';
【检查磁盘空间不释放问题】
[root@/]# lsof |grep delete
kill 进程就行
【性能监测工具】
dstat
yum -y install dstat
dstat -cdlmnpsy
Rpm
Centos 5.x 安装:http://pkgs.repoforge.org/dstat/dstat-0.7.2-1.el5.rfx.noarch.rpm
Centos 6.x 安装:http://pkgs.repoforge.org/dstat/dstat-0.7.2-1.el6.rfx.noarch.rpm
dstat -t --top-io-adv --top-bio-adv -l
【scp命令】
-l limit
指定用户所能使用的带宽,以Kbit/s为单位。
-P port -p
保留原文件的修改时间,访问时间和访问权限。
【简易的python web服务器用途】
$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
localhost.localdomain - - [22/Jul/2011 10:39:52] "GET / HTTP/1.1" 200 -
...
【#取磁盘使用】
[root@localhost check_log]# df -h | awk '{if($0~"/$") print $(NF-1)}'
66%
[root@localhost check_log]# df -h | awk '{if($0~"/$") print $(NF-2)}'
85G
[root@localhost check_log]# df -h | awk '{if($0~"/$") print $(NF-1)","$(NF-2)}'
66%,85G
[root@localhost check_log]#
【#取cpu剩余】
top -b -n 1 | grep Cpu | awk -F',' '{print $(NF-4)}' | sed 's/%id//g'
【#去重统计】
cat AA.txt | sort | uniq -c | sort -nr | awk '$1 > 2 && $1 < 7 ' ----重复次数大于2小于7的打印出来
【#查看系统运行多长时间】
$ cat /proc/uptime
31351.83 31341.94
#第一个数字代表已经运行的时间
#可以用date命令来计算出系统的启动时间
$ date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"
2011-03-17 00:50:51
#使用date命令计算系统的运行时间
$ cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒\n",run_days,run_hour,run_minute,run_second)}'
系统已运行:0天8时45分27秒
#mysql主从监控
*/10 * * * * source /etc/profile && /bin/sh /tmp/DB_slave__monitor/mysql_slave_check.sh
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
重启sendmail
/etc/init.d/senmail restart
#修改默认存储引擎
default-storage-engine=INNODB
【#iso镜像合并window版】
copy /b CentOS-6.2-i386-bin-DVD1.iso+CentOS-6.2-i386-bin-DVD2.iso
#在modify_name_limit_time行后插入一条.i\是在之前插入
sed -i '/modify_name_limit_time/a\
#增加history历史条数
echo "HISTFILESIZE=5000" >> /etc/bashrc && echo "HISTSIZE=5000" >> /etc/bashrc && echo 'HISTTIMEFORMAT="%Y%m%d %T "'>> /etc/bashrc && export HISTTIMEFORMAT
【#调试防火墙】
*/5 * * * * root /bin/sh firestop.sh;firestop.sh内容为: service iptables stop;
【#dos文本转换】
dos2unix
【#关闭selinux】
临时办法:setenforce 0
永久办法:修改/etc/selinux/config文件中设置SELINUX=disabled
查看selinux状态:getenforce
【#软连接】
1、目标文件不需要创建
2、语法 ln -s 源文件 目标文件 把谁软件到那
下面示例是建立/data/tomcatlogin的软连接
ln -s /data/tomcatlogin /usr/local/tomcatlogin
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
【数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题】
2个解决方法:
1.临时修改:mysql>set global max_allowed_packet=524288000;修改 #512M
2.修改my.cnf,需重启mysql。 www.2cto.com
在 [MySQLd] 部分添加一句(如果存在,调整其值就可以):
max_allowed_packet=10M
【mysql连接慢解决办法】
编辑/etc/mysql/my.cnf
在[mysqld]下面加入如下两行
skip-name-resolve
【setup网络报错】
yum remove system-config-network system-config-network-tui
yum install system-config-network system-config-network-tui
wget ftp://ftp.pbone.net/mirror/www.startcom.org/ML-5.0.7/os/i386/StartCom/RPMS/system-config-network-tui-1.3.99.10-2.ML5.noarch.rpm
wget ftp://ftp.pbone.net/mirror/www.startcom.org/ML-5.0.7/os/i386/StartCom/RPMS/system-config-network-1.3.99.10-2.ML5.noarch.rpm
rpm -ivh system-config-network-1.3.99.10-2.ML5.noarch.rpm system-config-network-tui-1.3.99.10-2.ML5.noarch.rpm
【###指定网卡ping获取mac地址】
arping -I eth1 -c 1 192.168.127.6
【#####提取某个表数据】
awk '/CREATE TABLE `表名`/{print;while(getline line){if(line ~ /DROP TABLE/){break};print line}}' www.sql | grep -v ^SET > b_new.sql
b_new.sql为提取出来的sql文件。
【mysqlbinlog根据时间点还原】
mysqlbinlog --start-datetime="2013-06-01 05:34:00" --stop-datetime="2013-06-01 15:54:00" mysql-bin.000029 > mysql-bin.000029.sql
#根据库名还原
mysqlbinlog --database=jianghu_log mysql-bin.000029 > mysql-bin.000029.sql
【删除目录下的所有txt文件排除test.txt【
rm `ls *.txt|egrep -v test.txt`
netstat -ap ---查看端口进程pid
pkill -kill -t tty
sed -n '851, 1500p' tempdb.sql > tempdb-2.sql
【排错mysql】
ERROR 23 (HY000) at line 25: Out of resources when opening file './zhushen_flash_log_db/' (Errcode: 24)
show global variables like '%open%';
这就是MySQL的文件描述不够用
修改my.cnf文件加入以下两行:
open_files_limit = 65535
innodb_open_files = 65535
然后重启mysql 进入mysql查看open file数量:show variables like 'open%';
wget -t0 -c -nH -np -b -m -P /localdir http://freesoft.online.sh.cn/mirrors/ftp.redhat.com -o wget.log --------下载整个网站内容
rpm -e php-4.3.9-3.15 ——nodeps ------------实在卸载不掉用此参数卸载
【使用yum的扩展插件yum-fastestmirror】
#yum -y install yum-fastestmirror
在Centos 4上,名字叫yum-plugin-fastestmirror
【修改linux机器名】
hostname taobao-search01
vim /etc/sysconfig/network #修改其中的hostname
vim /etc/hosts
service network restart
【取CPU占用最高的进程ID】
ps aux|grep "^www "|awk '{print $3" " $2}'|sort|tail -n 1|awk '{print $2}'
ps auxw --sort=%cpu|awk '{print $3" "$2}'|tail -n 1|awk '{print $2}'
【跟踪该进程的动作】
strace -p `ps aux|grep "^www "|awk '{print $3" " $2}'|sort|tail -n 1|awk '{print $2}'`
【修改mysql的max_connections的方法】
mysqladmin variables | grep max_connections ----查看数据库连接!
set GLOBAL max_connections=4000
mysql -e "show full processlist;"
【#更改进程运行等级】
renice -10 -p 端口号
如renice -10 –p 9199
【查找死循环方法 】
1 top -H -p 30420,所有该进程的线程都列出来了。看看哪个线程pid占用最多,然后将这个pid转换为16进制,如 44bf,注意要小写
3 jstack 30420 | less,然后查找 nid=0x44bf,哦,找到了
8283 root 15 -10 9363m 8.7g 9.9m R 99.9 74.6 4:56.66 java
tomcat 的进程id 是 24809
ps -p 30285 -L -o lwp,time >30285_ps.log
ps -p 19023 -L -o lwp,time >19023_zhushenserver1_ps.log
jstack -l 30285 >30285_jstack.log
jstack -l 31401 >31401_jstack.log
ps中的-L选项可以列出所有线程信息,-o lwp,time表示自定义输出,只输出两列,线程id和time值,
time值表示该线程已经消耗的cpu时间,time 很长的话基本是死循环的
28010 00:00:00
28150 01:21:35
28335 00:00:00
28150 这个线程 可能是死循环线程
再用jstack 24809 查找进程 详细信息 28150 十六进制 ===0x6df6
在jstack 输出信息里 找到 nid=0x6df6 这个线程 详细信息
【com.t4game.webgm.zhushen.action.monitor.OnLineCountServlet】这个类中死循环
"catalina-exec-226" daemon prio=10 tid=0x000000004dfcf000 nid=0x6df6 runnable [0x000000004a162000]
java.lang.Thread.State: RUNNABLE
at java.lang.Integer.parseInt(Integer.java:499)
at com.t4game.webgm.zhushen.action.monitor.OnLineCountServlet.doGet(OnLineCountServlet.java:149)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:416)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:354)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)