工作积累-备忘 不指定

kangyang , 2014/07/21 16:29 , LINUX系统管理 , 评论(0) , 阅读(7248) , Via 本站原创 | |

【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


【如何在Linux中发现IP地址冲突】
yum install arp-scan
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


【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



【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 \;   改名



【下载日志发邮件】
yum install mutt
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




【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里面


link: http://blog.chinaunix.net/uid-20639775-id-3031821.html



【rsync 预览不同步】
rsync -nvr --progress /home/* test@ip::res

-n --显示那些文件将被传输
-v --详细输出模式
-r --目录递归模式


【同步】
rsync -avz --progress /home/*  test@ip::res

-a 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H)


【tar指定文件列表打包】
tar -czv -T filelist -f /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  


方法二:
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文件生成,但是只对当前会话起作用


【perror看系统报错信息】
[root@www ~]$ perror 30
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;   ---检查表是否损坏


【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  


【dump进程内存切片】
jmap -dump:live,format=b,file=文件名 进程ID
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


【找出消耗内存最多的前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\    aaaaaa' debug_server_params.xml


#增加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)
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]