找回linux丢失的磁盘空间

最近一台服务器空间总是报警,磁盘空间不足。
使用 df 命令查看,磁盘空间耗用接近 100%,将机器上过期的数据以及日志清理掉,但是空间很快又是接近 100%。
使用 du 查看,想找出磁盘空间被耗用在哪里了,结果发现他输出的结果和df命令输出的结果相差很大,离100%空间占用还远着呢。

丢失的空间跑哪了,是磁盘损坏了吗?

使用google搜索了一下,发现两个可能的原因:
1. 磁盘文件删除后,但是原先对应写文件的进程还在,仍然抓着那个文件,在往里面写数据,空间继续被他耗用,同时删除后的空间得不到释放,du 命令也看不到这个文件占用的空间。
2. 使用mount命令,挂载到一个原本有数据的目录,之前目录下的文件不可见也不会被du看到统计

因为这台服务器没有做特殊目录挂载,所以按照问题1查找丢失的空间。
使用 lsof | grep deleted 查找被删除的文件,果然发现一个巨大的日志文件

在外面kill掉写这个日志文件的进程,发现磁盘空间一点一点被释放回来了
重新运行进程,发现日志也被正常写入。

Popularity: 5% [?]

Related

Linux每进程线程数问题处理

公司的一台服务器升级,原先运行正常的一个服务经常会跳出,于是予以分析解决。
该服务是一个tcp的服务端程序,被动接收客户端连接处理数据,升级后当客户端连接到一定量后程序会自动跳出。

使用netstat查看各个状态的数量
netstat -na |awk ‘{print $6}’|sort |uniq -c |sort -nr
发现很多的CLOSE_WAIT,并且还在不断增加中。
觉得可能是CLOSE_WAIT得不到释放,占用很多资源,
于是修改sysctl.conf中关于tcp连接的连接时间等设置,结果问题依旧。

怀疑收到攻击,使用
netstat -na |grep CLOSE_WAIT|awk ‘{print $5}’|awk -F”:” ‘{print $1}’|sort |uniq -c |sort -nr |wc -l 查看连接过来的地址,发现都是地址来源都是正常的

首先检查
使用 ps -fe |grep programname 查看获得进程的pid
再使用 ps -Lf pid 查看对应进程下的线程数,发现数值为303,远小于实际应该的数量。于是初步判断是由于线程数不够造成的原因。查找资料发现可以通过设置 ulimit -s 来增加每进程线程数。

每进程可用线程数 = VIRT上限/stack size
其中 VIRT 上限: 32位x86 = 3G 64位x64=64G
statck size 默认是 10240 因此在默认情况下
32位系统上单进程最多可以创建300个线程,
64系统在内存充足的情况下最多可以创建 6400 个线程。

在机器硬件固定的情况下,可以通过 ulimit -s 降低stack size 的设置值来获得更多的每进程线程数。

Popularity: 4% [?]

Related

给fast-cgi方式的php做一个检查脚本

使用fast-cgi方式的php在使用,有时候由于编写的代码问题,使处理代码的php-cgi进程的运行占用很多时间,在将所有活动的 php-cgi 进程都占用后,web服务器对php的请求就失去响应了。

通过命令查看服务器上一共开了多少的 php-cgi 进程

  1. ps -fe |grep "php" | grep -v "grep" | wc -l

使用如下命令查看已经有多少个php-cgi进程用来处理tcp请求

  1. netstat -anop | grep "php" | grep -v "grep" | wc -l

当被使用的php进程接近所开启的php进程数时,可以考虑将被耗用的php进程释放一下,以防止网站访问的阻塞。

按照以上思路编写了一个检查脚本。

  1. #
  2. #!/bin/sh
  3. #
  4.  
  5. echo "begin check"
  6.  
  7. #define default check delta num
  8. defdeltacount=10
  9.  
  10. phpcount=`ps -fe |grep "php" | grep -v "grep" | wc -l`
  11. netstatcount=`sudo netstat -anop | grep "php" | grep -v "grep" | wc -l`
  12.  
  13. echo "  php process count is $phpcount
  14.  netstat process count is $netstatcount"
  15.  
  16. deltacount=`expr $phpcount$netstatcount`
  17.  
  18. if [ -n "$1" ]; then
  19.   defdeltacount=$1
  20. fi
  21.  
  22. echo "deltacount is $deltacount, defdeltacount is $defdeltacount"
  23.  
  24. if [ $deltacount -lt $defdeltacount ]; then
  25.   echo "  need reset"
  26.   sudo /root/tools/resetphp.sh
  27. else
  28.   echo "  not need reset"
  29. fi
  30.  
  31. echo "check end"

其中 /root/tools/resetphp.sh 为编写的php重启脚本。
脚本可以放到 crontab 中,做自动定时检查处理。

Popularity: 2% [?]

Related

编译mogileFS的php模块

下载 php 的mofileFS 模块, 下载地址在http://www.sunnyu.com/?p=10有列出
1. 解压
2. 执行 phpize 命令
3. 执行 ./configure –with-php-config=/usr/local/php526/bin/php-config
4. 执行 make
碰到错误,原来是没有安装 neon 开发包,于是在linux安装盘上找到 neon-0.24.7-4.i386.rpm, neon-devel-0.24.7-4.i386.rpm
将其安装上

  1.  rpm -ivh neon-0.24.7-4.i386.rpm
  2.  rpm -ivh neon-devel-0.24.7-4.i386.rpm

再使用 make ,一切正常
5. make install
记录下拷贝到的路径
6. 修改php.ini 里面添加上新的模块
再module部分添加上上面记录下的文件路径
7. 编写一个php 页面做测试

Popularity: 2% [?]

Related

为Linux安装NTP时间同步服务

一组Linux服务器常有时间不一致,这就需要安装ntp时间同布服务.

安装NTP服务端

1.安装ntp服务包,这个在安装盘上基本都有的,没有的找一下rpm包,安装一下
2.找到系统可以访问使用的基准时间服务器,一个公共地址 www.ntp.org
3.配置 /etc/ntp.conf,主要设置 server和driftfile两项设置
4.启动 ntp 后台服务

  1. service ntpd start

5. 不要忘记打开iptables中的端口限制

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT

一些免费的 标准时间服务器
cn.asia.pool.ntp.org
0.asia.pool.ntp.org
1.asia.pool.ntp.org

客户端机器配置

1.同样也开一个ntp服务
2.使用一个crontab定时和内部的ntp服务器作时间同步

*/30 * * * * /usr/sbin/ntpdate 192.168.0.11

Popularity: 2% [?]

Related

IPTables默认没有对Output设置限制规则

今天一个不小心,发现了一个以前一直没有注意的问题,那就是Redhat的iptables默认是不对output做限制的。

:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

为了简单添加对output的限制,还需要在

-A INPUT -j RH-Firewall-1-INPUT

后添加一行

-A OUTPUT -j RH-Firewall-1-INPUT

这样重启iptables服务后,本机对外部的访问如果不在规则内才会被禁止。

Popularity: 2% [?]

Related

Linux操作ISO的一些命令

要做ISO文件的打包查看,于是对一些ISO相关命令做下备忘。