前些日子,系统上线了,发现tomcat 下的日志增长得挺快的,写了个脚本清除n天以前的日志

web_def_tomcat_log_path=/Application/tomcat/log
$web_def_tomcat_log_expire_days=7
if [ “$web_def_tomcat_log_expire_days” -gt 0 ]
then
echo “find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name ‘*.log’ -exec rm -f {} \;”
find $web_def_tomcat_log_path -follow -mtime +$web_def_tomcat_log_expire_days -name ‘*.log’ -exec rm -f {} \;
fi

由于web的mysql下面挂的同步太多了,每天产生1-2G的mysql-bin文件,因此也写了个清除mysql-bin的文件,这个文件会至少保留最新的一个mysql-bin.0*文件

web_def_host=”1.2.3.4″ #mysql的ip
web_def_port=3306 #mysql的端口
web_def_username=”tester” #mysql的用户
web_def_password=”123″ #mysql的密码
web_def_mysql_expire_logs_days=7 #删除7天以前的mysql-bin,但是最后至少保留一个文件
mysql_exe=”mysql -h $web_def_host -P $web_def_port -u $web_def_username –password=$web_def_password -e ”
if [ “$web_def_mysql_expire_logs_days” -gt 0 ]
then
#获取n天以前被修改的mysql-bin文件,
logFileName=`find $web_def_mysql_data_path -follow -atime -$web_def_mysql_expire_logs_days -name ‘mysql-bin.0*’ |sort|head -1`
if [ “$logFileName” != “” ]
then
logFileName=`basename $logFileName`
echo $mysql_exe “\”PURGE MASTER LOGS TO ‘$logFileName’\””
$mysql_exe “PURGE MASTER LOGS TO ‘$logFileName'”;
fi
fi

有时候远程下载tar包的时候,由于包太大,失去连接时,需要重新下载非常郁闷。
这时候使用split分割分解拆分大包文件,然后单个下载下文件就OK。在Linux下使用 tar 命令来将文件打包并压缩是很通常的用法了。可是Linux的文件系统对文件大小有限制,也就是说一个文件最大不能超过2G,如果压缩包的的内容很大,最后 的结果就会超过2G,那么该怎么办呢?又或者压缩包希望通过光盘来进行备份,而每张光盘的容量只有700M,那么该如何存储呢?解决的办法就是将最后的压 缩包按照指定大小进行分割,这就需要用到split命令了。举例说明:
要将目录logs打包压缩并分割成多个1M的文件,可以用下面的命令:
tar cjf – logs/ |split -b 1m – logs.tar.bz2.
完成后会产生下列文件:
logs.tar.bz2.aa, logs.tar.bz2.ab, logs.tar.bz2.ac
要解压的时候只要执行下面的命令就可以了:
cat logs.tar.bz2.a* | tar xj

再举例:
要将文件test.pdf分包压缩成500 bytes的文件:
tar czf – test.pdf | split -b 500 – test.tar.gz
最后要提醒但是那两个”-“不要漏了,那是tar的ouput和split的input的参数。

这里对命令做一些讲解。
压缩和分割命令行中红色部分的为命令对应的I/O文件名参数,其中-表示标准输入或输出。那么结合上面的例子,tar命令表示的意思就是将logs目录压 缩,生成的结果直接输送到标准输出上;而split命令表示从标准输入获得文件内容进行分割,结果文件前缀为logs.tar.bz2.。二者再通过管道 将各自的标准输入输出对接起来。

这里再解释一下split命令的参数含义:
-b SIZE 指定每个文件的大小,其单位可以为b(512字节)、k(1K)、m(1M)
-d 使用数字而不是字母作为后缀名
-a X 指定后缀名的长度,默认为2位

这样上面的命令就可以变化为:
tar cjf – logs/ |split -b 1m -d -a 1- logs.tar.bz2.

注: $ cat file1 file2 file3 > bigfile

 

自己的pic文件目录

tar czvf – pic | split -b 1900m – pic.tar.gz.

昨天,一个程序需要导出500条数据,结果发现到150条是,Nginx报出504 Gateway Timeout错误 有的是502错误

经观察,发现大约30秒时超时,php.ini中执行时间配置已经是300秒:

写个程序测试

echo ‘aaa’;
set_time_limit(0);
sleep(40);
echo ‘aa’;

依然超时,可以确定set_time_limit这个函数没生效。

再查php-fcgi的配置php-fpm.conf,下边这个设置疑似有问题:

<value name=”request_terminate_timeout”>30s</value>

这个值修改到  0秒的是时候 是不限制。这样对服务器性能有损失。我设置的是900秒解决问题

Linux系统下 lnmp的集成环境

把 /usr/local/php/etc/php-fpm.conf  中的 request_terminate_timeout = 900 就可以了

 

在项目中经常会遇到这样的情况,在Windows下上传到服务器的中文文件夹或文件变成乱码了。 以前一度不知道怎么办,用着办法也是非常落后的:

  1. 备份文件夹,照理来说,乱码文件夹或文件是不会下载下来的。
  2. 删除服务器上的文件夹所有内容,因为rm -rf * 总是可以执行的
  3. 再上传
      这是一个比较笨的方法。
      今天在搜索Git中文目录乱码的问题时,想看看Linux下文件夹的结构,于是找到了删除乱码文件夹或文件的方法。通过 文件的inode号来删除文件(相当于我们用pid来kill进程一样)
  1.    ll -i 或 ls -i  列出文件的inode号
  2.    find  -inum 【inode号】 -delete
备注:如果是乱码目录,上面的方法就没有用了。Linux有个缺陷就是  你可以用rm -rf 删除当前目录的上级目录,就把这个乱码目录删除了。亲测可用

21、为什么单个item的大小被限制在1M byte之内?

简单的回答:因为内存分配器的算法就是这样的。

详细的回答:

1)Memcached的内存存储引擎,使用slabs来管理内存。内存被分成大小不等的slabs chunks(先分成大小相等的slabs,然后每个slab被分成大小相等chunks,不同slab的chunk大小

是不相等的)。chunk的大小依次从一个最小数开始,按某个因子增长,直到达到最大的可能值。如果最小值为400B,最大值是1MB,因子是1.20,各个slab的chunk的大小依次是:

slab1 – 400B;slab2 – 480B;slab3 – 576B …slab中chunk越大,它和前面的slab之间的间隙就越大。因此,最大值越大,内存利用率越低。Memcached必须为每个slab预先分配内

存,因此如果设置了较小的因子和较大的最大值,会需要为Memcached提供更多的内存。

2)不要尝试向memcached中存取很大的数据,例如把巨大的网页放到mencached中。因为将大数据load和unpack到内存中需要花费很长的时间,从而导致系统的性能反而不好。如果

确实需要存储大于1MB的数据,可以修改slabs.c:POWER_BLOCK的值,然后重新编译memcached;或者使用低效的malloc/free。另外,可以使用数据库、MogileFS等方案代替

Memcached系统。

Read More →