work中关于服务器问题和解决方式

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看不到,只能看到底层函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值