1,工作中经常遇到服务器连不上,或者响应速度非常慢的情况
问题:可能是磁盘满了。
此时可以用命令 df -h 查看磁盘占用情况,如下
如上图可以看到磁盘占用97%,已经非常高了。
最先想到处理方式是删除大的文件。
命令 du -h / --max-depth=1 | sort -hr | head -n 10 //找出/目录下占用磁盘前10的目录,降序排列
然后再依次往下找最大的文件
然后找到最大的文件进行删除。如 rm -f 2019.07.31.log
进行到这里还有可能没有减少磁盘占用。暂时没找到可解决的方式。
2 ,重启nginx,php-fpm失败
2.1 原因:有可能是端口被占用。
nginx 80 或者 443端口 php-fpm 9000端口
解决方式:
netstat -lnp|grep 80 查看80端口被那些服务占用
如上图可以看到服务id1959的nginx监听了80端口。是正确的。
如果被其他服务占用,则
kill -9 服务id //杀掉其他服务
然后再重启nginx
service nginxd restart
php-fpm端口占用解决方式跟nginx一样。
2.2 原因:nginx.pid 或者 php-fpm.pid 因为异常关机没有被删除或者文件存在,内容为空
解决方法: 重启 restart,如果还不行,需要手工删除pid文件。
pid文件的目录可以通过去查看nginx,php-fpm的配置文件知道。
3,杀死僵尸进程
僵尸进程:程序即使执行完了也依然留在进程表中,僵尸进程并不做任何事情, 不会使用任何资源也不会影响其它进程。
但是遗留太多还是会有问题。
列出僵尸进程:
ps -aux | grep Z
杀死僵尸进程:
kill -s SIGCHLD pid //pid为父进程id
4,死循环的进程
问题:在工作过程中常常会遇到自己写了死循环,或者非常耗内存的代码。
解决方式:直接top 找到对应进程 然后kill -9 对应进程号
以下是如何找到对应的死循环代码或者更好理解底层。此方式更适用于c和java
4.1 top 找到耗损cpu最高的进程ID
我写的是php死循环做测试的,所以进程id为6139
4.2 查看是进程下的哪个线程有问题
top -H -p 6139
由上图知道出问题的线程pid=6139
4.3 用gdb来attach目标进程
gdb icdn 6139
4.4 在gdb中,列出线程状态
info threads
4.5 找到gdb为线程分配的id,执行
thread 1
4.6 bt 一下就能看到整个线程栈的具体执行过程
这个是我写的循环的函数php执行的过程,根据堆栈从下往上看
如果是c和java可以看到对应执行的函数和对应的行号。php看不到,只能看到底层函数。