背景:有时候需要比对一下文件,再就是如何快速的跳转到下一个不同,及从一个文件拷贝不同到另一个文件,这些在vimdiff支持到,截取部分备用。

光标移动
接下来试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。这是因为"scrollbind"选项被设置了的结果,vim会尽力保证两侧文件的对齐。如果不想要这个特性,可以设置:
:set noscrollbind
可以使用快捷键在各个差异点之间快速移动。跳转到下一个差异点:
]c
反向跳转是:
[c
如果在命令前加上数字的话,可以跳过一个或数个差异点,从而实现跳的更远。比如如果在位于第一个差异点的行输入"2]c",将越过下一个差异点,跳转到第三个差异点。
回页首
文件合并
文件比较的最终目的之一就是合并,以消除差异。如果希望把一个差异点中当前文件的内容复制到另一个文件里,可以使用命令
dp (diff "put")
如果希望把另一个文件的内容复制到当前行中,可以使用命令
do (diff "get",之所以不用dg,是因为dg已经被另一个命令占用了)
如果希望手工修改某一行,可以使用通常的vim操作。如果希望在两个文件之间来回跳转,可以用下列命令序列:
Ctrl-w, w
在修改一个或两个文件之后,vimdiff会试图自动来重新比较文件,来实时反映比较结果。但是也会有处理失败的情况,这个时候需要手工来刷新比较结果:
:diffupdate
如果希望撤销修改,可以和平常用vim编辑一样,直接
<ESC>, u
但是要注意一定要将光标移动到需要撤销修改的文件窗口中。


来自:https://www.ibm.com/developerworks/cn/linux/l-vimdiff/
背景:批量修改多台机器里的密码,怎么办,一台机器知道后,拷贝到另外机器上的办法,采用第三种较好。
1)新建用户:useradd -m 用户名 //-m是建一个home
2)设置密码:passwd 用户名
3)一般需要修改/etc/passwd 下面的bash
4)将用户加入sudo组。

总之,一个同样的Unix/Linux的密码,经过一次后,其生成的密码shadow是不一样的,实践如下所示可证明:

但是你批量替换时,完全可以选一个就成,如:


接近博文的正题了:
多台机器要批量加时,可用secureCRT,或大公司用zookeeper结合shell实现conf前端web系统进行海量机器的密码新增:

————————————————介绍修改用户密码三种方法————————————————
第一种:
echo "123456"|passwd --stdin root
优点:方便快捷
缺点:如果你输入的指令能被别人通过history或者其他方式捕获,那么这样的方式是很不安全的,更重要的是如果密码同时含有单引号和双引号,那么则无法通过这种方法修改。


第二种:
a.首先将用户名密码一起写入一个临时文件.
cat chpass.txt
root:123456
zhaohang:123456
b.使用如下命令对用户口令进行修改:
chpasswd<chpass.txt
c.可以使用 123456 来登录系统,密码修改完毕.
优点:可以很快速方便的修改多个用户密码
缺点:明文密码写在文件里仍然显得不够安全,但是避免了第一种修改方式不能有特殊字符串密码的情况.


第三种:
a.用 openssl passwd-1 来生成用户口令(这块有一台后,其它就不用再生成了,直接:chpasswd -e < chpass.txt),连同用户名一起写入文件.
cat chpass.txt
root:$1$ri2hceVU$WIf.firUBn97JKswK9ExO0
zhaohang:$1$i/Gou7.v$Bh2K6sXmxV6/UCxJz8N7b.
b.使用如下命令对用户口令进行修改:
chpasswd -e < chpass.txt
c.可以使用 123456 来登录系统,密码修改完毕.
优点:可以很快速方便的修改多个用户密码
缺点:和上面两种相比大大增强了安全性

附加介绍:
openssl passwd -1 命令可以输出shadow里面的密码,把这个命令生成的秘串更改为你shadow里的密码,那么下次你登录系统就可以用你的生成密码的口令来登录了,使用这个命令,即使口令一样,多次执行生成的密码串也不一样。那个hash值对应的密码是完全随机的基于64位字符编码的28位长,因此要破解它是非常困难的,只要不用那些密码已经公布出来的hash值创建账号,即使这些密码文件被公布也还是比较安全的。使用旧的unix哈希可以去掉 -1 参数。

[root@WEB01~]# openssl passwd -1
Password:123456
Verifying-Password:123456
$1$ri2hceVU$WIf.firUBn97JKswK9ExO0

也可以直接使用如下命令来直接生成:
[root@WEB01 ~]# openssl passwd -1 123456

来自:http://blog.chinaunix.net/uid-561779-id-166621.html
背景:刚解决前面的svn client版本太新问题http://jackxiang.com/post/8476/,又出现一新的问题,如下.

is not known to exist in the repository and is not part of the commit,yet its child:
  在把写好的代码提交到svn上面时,遇到了一个错误如下:
svn: Commit failed (details follow):
svn: 'D:\eclipse\StatusInquiry\src\com\cnjmwl\scm\policy' is not under version control and is not part of the commit, yet its child 'D:\eclipse\StatusInquiry\src\com\cnjmwl\scm\policy\policyActivity.java' is part of the commit
        仔细看错误的原文,翻译成中文大致的意思就是要提交的代码不在版本控制之下,并且不是提交的一部分,他的子文件也不是提交的一部分,我自个儿琢磨着就是要先提交父文件夹,然后再提交父文件夹的子文件,然后我先提交了父文件夹,然后提交其中的子文件,最后把问题解决了。。
        PS:如果上面的方法不行的话,试试看吧要提交的文件先备份一下,然后把源文件删除了,然后再拷回来,再提交。。我这样屡试不爽,能解决问题的。。      

摘自:http://blog.csdn.net/lufeng20/article/details/7641093
背景:一外包说是svn没权限,一截图根据里面的提示,感觉是svn client版本太新。

因为SVN客户端版本为1.8以上,太新,跟服务器端不匹配。请卸载,安装1.7版,并重启。
请在新的目录中重新checkout代码,原workspace目录请废弃,不要在其中再执行SVN操作。


来自:http://blog.sina.com.cn/s/blog_4c81e6230101e18a.html
背景:Nginx代理到tomcat时出现504 Gateway Time-out。

如果是设置IP直接proxy则设置在nginx的http{ 里面即可,不用设置在server里。

摘自:http://www.ha97.com/5194.html

超时有问题不光是超时,更有可能是被反向代理的出现了500的内部服务器错误:
背景:对于java和tomcat结合的程序,其实还是一个服务器,可能会有各种线程啥的如上传分片文件时会合并,这种对于PHP来讲是个问题,但是对于java来讲是能实现的边上传边合并的,也是非常好的,但是呢,这种办法如果写得不够好,很可能出现一些问题,假死、僵死,还不如用PHP写个上传,后台用那个守护进程进行合并来得更稳定。
阅读全文
背景:在一个Java分片上传时发现其CPU idle为98.5,以为值越高越危险,于是查了下,表明"System Idle Process" 中的 idle 是“空闲”得很。
sar -n DEV查看网卡网络流量:


cpu ide 是 cpu 的一个命令,cpu 见到这个命令,就停止工作一个指令。变相的可以降低功耗和休息一下。
对于系统来说,如果调度程序没有可以让 cpu 执行的任务,那么就自动发送 ide 命令让 cpu 休眠一个指令。
估计你的程度运行出现了冲突,导致大部分时间都在等待。

在CPU空闲的时候,发出一个IDLE命令,使CPU挂起(暂时停止工作),可有效的降低CPU内核的温度,在操作系统服务里面,都没有禁止它的选项;默认它是占用除了当前应用程序所分配的处理器(CPU)百分比之外的所有占用率;一旦应用程序发出请求,处理器会立刻响应的。在这个进程里出现的CPU占用数值并不是真正的占用而是体现的CPU的空闲率,也就说这个数值越大CPU的空闲率就越高,反之就是CPU的占用率越高。


当“System Idle Process”进程占用资源为2%时,说明机器目前只有2%的资源是空闲的,即机器可能感染了病毒或被其他程序占用了98%的资源。换句话说,“System Idle Process”进程占用资源占用资源越大则系统可用资源越多,其字面意思是“系统空闲进程”。


用sar进行CPU利用率的分析
[root@wh-appserver413 its]# sar -u 2 10
Linux 2.6.18-92.el5 (wh-appserver413)   01/29/2016

10:53:17 AM       CPU     %user     %nice   %system   %iowait    %steal     %idle
10:53:19 AM       all      0.06      0.00      1.00      0.00      0.00     98.94
10:53:21 AM       all      0.56      0.00      0.56      0.25      0.00     98.62
10:53:23 AM       all      0.00      0.00      0.06      0.62      0.00     99.31
10:53:25 AM       all      0.06      0.00      0.25      2.87      0.00     96.81      

我的个人博客:
Linux 4.4.0-1.el7.elrepo.x86_64 (iZ25dcp92ckZ)  2016年01月29日  _x86_64_        (1 CPU)
10时54分45秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
10时54分47秒     all      0.00      0.00      0.00      0.00      0.00    100.00
10时54分49秒     all      0.00      0.00      0.00      0.50      0.50     99.00
10时54分51秒     all      0.50      0.00      0.00      0.00      0.00     99.50
平均时间:     all      0.17      0.00      0.00      0.17      0.17     99.50

%idle:CPU空闲时间百分比。
        在所有的显示中,我们应主要注意%iowait和%idle,%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

参考:http://blog.itpub.net/8554499/viewspace-580300/
背景:阿里上买了一小vps,空间本来就小,居然发现一个大文件,442M    /var/log/cron,于是想把它干掉,以减少占用的磁盘空间。
我的vps是一个文件:
echo "" >  /var/log/cron
du -sh /var/log/cron
而有的那个机器是一个目录,目录怎么办,一样删除,如下:
最近刚好有一个小任务 - 由于产品产生的Log很多,而且增长很快,所以需要用脚本(Bash scripts)删除过期的Log文件 。

使用Linux下的Cron Job可以很好的解决这个问题。

   什么是Cron Job?
   建立Cron Job需要用到命令crontab,维基百科定义: crontab 命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令 。
查阅了一些资料(发现技术查询还是要用Google)参考后,期间也遇到很多问题,通过摸索和学习,实现步骤如下:

一. 写一个Bash shell script,作用: 检索日志文件夹下的所有log文件,查询每个文件的日期,如果日期过期,则删除这个log文件   


二. 新建一个Cron Job,周期性的执行上面的脚本
命令:


注意:
1. 这里我用的是 sudo crontab -e ,不是crontab -e,这样做是使用root的crontab,可以使用sudo,获取root某些权限。
2. Cron Job的格式如下:


具体可参见http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/,Cron Job的用法讲解很详细。

3. 如何通过日志查看Cron Job的执行情况?

" >> /home/user/cron_job.log 2>&1 "的作用是可以方便的将Cron Job执行情况的日志记录到自己指定的Log文件中,方便查看Job执行情况。另外还可通过下面这个命令,查看Job执行的一些其他信息,感觉主要还是看自己指定的日志文件,如果执行出错,如Permisson Denied错误,在里面记录的很清楚。


三. 小结

经过以上的步骤,就可以很轻松的在Linux中建立起一个Cron Job,用于周期性的做某些事情,如删Log等。

四. 赔偿是参考资料和摘自:
原文  http://www.cnblogs.com/KevinSong/p/3816981.html
安装Nginx:

wget --no-check-certificate http://ftp.exim.llorien.org/pcre/pcre-8.39.tar.bz2
wget --no-check-certificate http://nginx.org/download/nginx-1.11.6.tar.gz
tar xf pcre-8.39.tar.bz2
tar xf nginx-1.11.6.tar.gz
cd nginx-1.11.6/

vi auto/lib/openssl/conf

# 将下面的内容修改
            CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
            CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
            CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
            CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
            CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
# 为
            CORE_INCS="$CORE_INCS $OPENSSL/include"
            CORE_DEPS="$CORE_DEPS $OPENSSL/ssl.h"
            CORE_LIBS="$CORE_LIBS /usr/local/lib/libssl.a"
            CORE_LIBS="$CORE_LIBS /usr/local/lib/libcrypto.a"
            CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
pkg install google-perftools
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_gzip_static_module --with-http_v2_module --with-http_realip_module --with-google_perftools_module --with-http_stub_status_module --with-http_sub_module --with-http_flv_module --with-http_ssl_module --with-openssl=/usr/local/include/openssl --with-pcre=../pcre-8.39 --with-pcre-jit            
gmake -j `sysctl hw.ncpu | wc -w`
gmake install -j `sysctl hw.ncpu | wc -w`

=========================From:https://my.oschina.net/ericliu77/blog/801539=================================




php5.6.17是最后一个php5版本,后来就到php7了。

FreeBSD 10系统编译安装Nginx, PHP, MariaDB环境
可惜的是 FreeBSD 10 用 Clang 替代 gcc 为默认编译器,这让用惯了 gcc 的同学们很不爽:
http://www.php1.cn/article/62718.html

整合freeBSD下nginx+php+mysql安装方案(ports安装):
http://blog.csdn.net/shaobingj126/article/details/5620702

freebsd+nginx+php+mysql+zend+phpmyadmin+系统优化+防止ddos +傻瓜式ports安装法:
http://blog.163.com/023_dns/blog/static/11872736620091029306126/
http://blog.163.com/dyc_888@126/blog/static/100443351201021910057781/

FreeBSD下NGINX 1.8+PHP5.6 +PERL 5.20 +Mysql 5.6+FTP 环境搭建与优化:
http://www.douban.com/note/524153021/


在FreeBSD上配置Apache+SSL:
http://wenku.baidu.com/link?url=Wp51oiSGtk7yQF2x_fqI7g9vDWylT218Rs2q2rRWs-WJJwSbyMepcmclmuKCu9QZ4UVkiXCAkemZfj4CIQNT7OU9L3uvEuQgeNngeqfJ78e


This post will describe how to install and configure Apache, MySQL, PHP and phpMyAdmin on FreeBSD for basic local web development:
https://www.iceflatline.com/2011/11/how-to-install-apache-mysql-php-and-phpmyadmin-on-freebsd/


FreeBSD下Nginx配置ssl-自建CA给网站签发SSL证书 [原创]:
http://www.92csz.com/42/494.html

FreeBSD下防火墙设置:
http://blog.163.com/caizhongyi@126/blog/static/3391683920102594249139/

X3.2针对PHP7的兼容版本-测试ing:
https://github.com/branchzero/discuz-x32-php7/releases


FreeBSD+Rsync文件同步 :
http://blog.chinaunix.net/uid-20496698-id-1664047.html
http://blog.chinaunix.net/uid-20496698-id-1664047.html

How to Install Official PHP 7 release on FreeBSD 10.2:
http://rasyid.net/2015/12/05/install-official-php-7-release-on-freebsd-10-2/
http://rasyid.net/2015/01/23/how-to-install-phpng-aka-php7-on-freebsd-10/

内容管理框架 ThinkCMFX 2.0.0 发布,支持 PHP7:
http://www.oschina.net/news/68813/thinkcmfx-2-0-0
http://demo.thinkcmf.com/
背景:一个队列client的服务器上,有一天运维网络调整后,发现其访问队列状态出现下面的提示:

根本原因是队列一直在跑,网络调整时出现有些请求因调整没有及时返回,网络可能路很差了,一堆的timewait导致client机上的fd耗尽引发上面的问题,
可以用netstat看下TIMEWAIT情况,发现一大堆的TIMEWAIT,如下图:阅读全文
背景:阿里去的Centos是到7.0,而内核是3.10.0,而centos7.1.1内核是4.1.1,Linus说是新的内核性能上应该更强一些,实践证明升级后的感觉的确要强一些,新内核真不错。


这个是用阿里云论坛里手工做好的rpm包进行升级:
https://bbs.aliyun.com/read/249016.html?spm=5176.bbsr250035.0.0.ATHIBV

用二进制包升级的下载并成功升级的地址:http://down.7qy.com/Hot-kerne/rpm/hot-centos-kernel-4.x-up-1.2.0.bin
======================================================================
======================================================================
*        热点 CentOS 6/7 内核升级程序  Ver.1.2.0  by blog.7QY.Com       *
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
*              安装完成后需要重新启动系统才能使用新内核                 *
* 按Ctrl+C键退出本安装程序,然后输入shutdown -r now 或 reboot 重启系统  *
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
*                Tips: Select < 1 > to 升级CENTOS 6.X内核               *
*                Tips: Select < 2 > to 升级CENTOS 7.X内核               *
=========================================================================

Please input ( 1 or 2 ) to 热点 CentOs 6/7 内核升级程序
Select: (1) 升级CENTOS 6.X内核 | (2) 升级CENTOS 7.X内核
(1/2): 2

开始升级CENTOS 7.X内核...
准备中...                          ################################# [100%]

......


警告:RPM 数据库已被非 yum 程序修改。
  正在安装    : kernel-ml-4.4.0-1.el7.elrepo.x86_64                                                                      1/2
  正在安装    : kernel-ml-devel-4.4.0-1.el7.elrepo.x86_64                                                              2/2
  验证中      : kernel-ml-devel-4.4.0-1.el7.elrepo.x86_64                                                               1/2
  验证中      : kernel-ml-4.4.0-1.el7.elrepo.x86_64                                                                       2/2

已安装:
  kernel-ml.x86_64 0:4.4.0-1.el7.elrepo                      kernel-ml-devel.x86_64 0:4.4.0-1.el7.elrepo                    

完毕!
会立即重新启动(有可能不是,是挂载新内核,因为后面发现内存还剩下37M,分页的那个进程占用CPU高达95%,后来把PHP-fpm重新调小一点重新启动一下php-fpm就好了,但一会儿CPU又上来了:http://jackxiang.com/post/8438/。),后一会儿就连接上了,发现内核成功升级,数据也正常(我没有挂载,就是阿里云默认的20G),新内核是相当的高效,通过ssh就能感觉得到。
[root@iZ25dcp92ckZ ~]# uname -rasp
Linux iZ25dcp92ckZ 4.4.0-1.el7.elrepo.x86_64 #1 SMP Sun Jan 10 21:17:16 EST 2016 x86_64 x86_64 x86_64 GNU/Linux
http://www.91cto.com.cn/detail/udepnxs/
背景:如果FreeBSD安装在vmware里,想上网,那么Vmware8及nat模式想上网,那么dhcp分配IP是难免的。在笔记本用wifi上网那个网卡共享给Vmware8后,vmware8会有一个IP 192.168.137.1  ,经过上面配置后FreeBSD获得IP是 192.168.137.129,没有curl,用ping一个就能获取到IP说明初步成功,但能否上外网和dns有关。

1、运行命令ifconfig查看当前网卡列表,确定名称,如果不在列表内,可能是驱动没装好

% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:a0:cc:da:da:da
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
ether 00:a0:cc:da:da:db
media: Ethernet 10baseT/UTP
status: no carrier
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
2、vi /etc/rc.conf 添加
ifconfig_dc0="DHCP"
dhcp_program="/sbin/dhclient"
dhcp_flags=""
3、reboot后,应该就可以用了

来自:http://www.jb51.net/article/15810.htm
没有啥用对我来说,卸载掉:
[root@iZ25dcp92ckZ var]# rpm -qa|grep mail
mailx-12.5-12.el7_0.x86_64
libreport-plugin-mailx-2.1.11-21.el7.centos.0.5.x86_64
[root@iZ25dcp92ckZ var]# rpm -e mailx-12.5-12.el7_0.x86_64
错误:依赖检测失败:
        mailx 被 (已安裝) smartmontools-1:6.2-4.el7.x86_64 需要
        mailx 被 (已安裝) libreport-plugin-mailx-2.1.11-21.el7.centos.0.5.x86_64 需要
[root@iZ25dcp92ckZ var]# rpm -e smartmontools-1:6.2-4.el7.x86_64
[root@iZ25dcp92ckZ var]# rpm -e libreport-plugin-mailx-2.1.11-21.el7.centos.0.5.x86_64
[root@iZ25dcp92ckZ var]# rpm -e mailx-12.5-12.el7_0.x86_64
阅读全文
背景:一个状态文件只有一行,这一行的数值改变,于是想用tail -f,但发现不行,看不到它变化,怎么办?想起前两天和rango搞了下websocket下的tail,有一个watch的命令可以搞定。
命令如下,1秒种cat一次,就能看到变化了:
watch -n 1 "cat /data/upload/upload_state/*.state"

Every 1.0s: cat /data/upload/upload_state/*.state                                                                                    Fri Jan 15 11:01:25 2016
0-316669951/5864975953

可能1秒后是这样:
Every 1.0s: cat /data/upload/upload_state/*.state                                                                                    Fri Jan 15 11:02:36 2016
0-400752639/5864975953

参考来源:https://github.com/matyhtf/websocket_tail
背景:想用户登录ssh到linux时发邮件里有top,但发现出现top: failed tty get 错误 。
通过其他程序或脚本在非交互式模式下调用top命令,经常会出现:
   top: failed tty get 错误
解决办法:加个-b 选项皆可
-b : Batch mode operation
   Starts  top  in  Batch mode, which could be useful for sending output from top to other programs or to a file.  In this mode, top will not accept input and runs until the iterations limit youve set with the -n command-line option or until killed.
例如执行:top -bn 1


通过其他程序或脚本在非交互式模式下调用top命令,经常会出现:
   top: failed tty get 错误
解决办法:加个-b 选项皆可
-b : Batch mode operation
   Starts  top  in  Batch mode, which could be useful for sending output from top to other programs or to a file.  In this mode, top will not accept input and runs until the iterations limit youve set with the -n command-line option or until killed.
例如执行:top -bn 1


来自:http://blog.chinaunix.net/uid-9554532-id-2000668.html
背景:本文作者主要是讲linux下的nginx处理高效是依赖内核驱动事件处理,但是一个一个的事件处理都是建立在一个消息处理队列循环,而这个一个个的循环的一个(一个事件循环)是得一个一个的处理,而OS系统的瓶颈是磁盘IO,而作者认为linux提供的相关磁盘IO异步操作不如FreeBSD的稳健,没有纳入Linux内核而FreeBSD对这块有优势,再就是nginx从应用层上加入了线程池,避免了这个循环被卡住,这两条的解决,真正提升了应用的效率,总之,Nginx对瞬间就处理完的事件上目前还是不错的,而非瞬间就处理完的操作则目前linux和在上面安装低版本的没有线程池支持的nginx来讲,性能并没有得到最大发挥,而这个新版本的nginx(加入了线程池)如果在FreeBSD上,则性能会最优,最后,作者所说的对于不是一瞬间就处理完的业务理论和实践上的确存在,也就是为何对于一些PHP耗时的处理,大多数是安装在apache上,而不是nginx,这也是有这个原因在里面的,很多人一说nginx牛了,就全用nginx,也是没有认真思考,为何大公司都是nginx和apache2同时使用的根源。

step1:
作者显然是有FreeBSD的立场如下:
要命的是,操作系统可能永远没有这个功能。第一次尝试是 2010 年 linux 中引入 fincore() 系统调用方法,没有成功。接着做了一系列尝试,例如引入新的带有 RWF_NONBLOCK 标记的 preadv2() 系统调用方法。所有的这些补丁前景依旧不明朗。比较悲剧的是,因为 持续的口水战 ,导致这些补丁一直没有被内核接受。
另一个原因是,FreeBSD用户根本不会关心这个。因为 FreeBSD 已经有一个非常高效的异步文件读取接口,完全可以不用线程池。

step2:
发文件这块是nginx的软肋,于是用了aio threads来补充:
Nginx从1.7.11开始为AIO(Asynchronous I/O)引入了线程池支持,能够使用多线程读取和发送文件,不会阻塞工人进程.
http://nginx.org/en/docs/http/ngx_http_core_module.html#aio
location /video/ {
sendfile on;
aio threads;
}
要启用多线程支持,configure时需要显式加入--with-threads选项.

step3:php发文件也交给了nginx,提高了效率减轻了sapi的等待时间,也就减少了nginx事件消息处理队列循环等待时间:
比如对于一些需要经过PHP认证身份的附件,可以通过X-Accel-Redirect告诉Nginx文件的路径,让Nginx利用它的线程池读取文件并发送给浏览器,免得阻塞PHP进程.
<?php
auth(); //用户身份认证
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filePath).'"');
//PHP通过X-Accel-Redirect告诉Nginx文件的路径,Nginx读取文件并发送给浏览器.
header("X-Accel-Redirect: $filePath");
//对比下面直接通过PHP输出文件
//readfile($filePath); //或者echo file_get_contents($filePath);

step4:有人因老外的这篇文章写了评论,http://xiaorui.cc/2015/06/25/%E5%AF%B9%E4%BA%8Enginx%E7%BA%BF%E7%A8%8B%E6%B1%A0thread-pool%E6%8F%90%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84%E7%96%91%E6%83%91/

step4涉及到FreeBSD的kqueque,功能角度来盾kqueue比epoll灵活得多。在写kqueue的时候,内核帮你考虑好了不少东西。但是从效率来看,从我作的压力测试来看epoll比kqueue强。估计是学院派自由派的一个哲学问题:
http://jarit.iteye.com/blog/935283
使用 kqueue 在 FreeBSD 上开发高性能应用服务器:
http://blog.csdn.net/xnn2s/article/details/6047038
____________________________________________________________________________
问题
一般情况下,nginx 是一个事件处理器,一个从内核获取连接事件并告诉系统如何处理的控制器。实际上,在操作系统做读写数据调度的时候,nginx是协同系统工作的,所以nginx能越快响应越好。

nginx处理的事件可以是 超时通知、socket可读写的通知 或 错误通知。nginx 接收到这些消息后,会逐一进行处理。但是所有处理过程都是在一个简单的线程循环中完成的。nginx 从消息队列中取出一条event后执行,例如 读写socket的event。在大多数情况下这很快,Nginx瞬间就处理完了。

如果有耗时长的操作发生怎么办?整个消息处理的循环都必须等待这个耗时长的操作完成,才能继续处理其他消息。所以,我们说的“阻塞操作”其实意思是长时间占用消息循环的操作。操作系统可能被各种各样的原因阻塞,或者等待资源的访问,例如硬盘、互斥锁、数据库同步操作等。

例如,当nginx 想要读取没有缓存在内存中的文件时,则要从磁盘读取。但磁盘是比较缓慢的,即使是其他后续的事件不需要访问磁盘,他们也得等待本次事件的访问磁盘结束。结果就是延迟增加和系统资源没有被充分利用。

有些操作系统提供了异步读写文件接口,在nginx中可以使用这些接口(http://nginx.org/en/docs/http/ngx_http_core_module.html?&&&_ga=1.197764335.1343221768.1436170723#aio)。例如FreeBSD就是一个较好的例子,但不幸的是,linux提供的一系列异步读文件接口有不少缺陷。其中一个问题是:文件访问和缓冲需要队列,但是Nginx已经很好解决了。但是还有一个更严重的问题:使用异步接口需要对文件描述符设置O_DIRECT标识,这意味着任何对这个文件的访问会跳过缓存直接访问磁盘上的文件。在大多数情况下,这不是访问文件的最佳方法。


                              ..............


英文原文:Thread Pools in NGINX Boost Performance 9x!
中文翻译:http://www.infoq.com/cn/articles/thread-pools-boost-performance-9x?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global
背景:直接访问ip没有问题,经过cdn后有问题(穿透当dns用,实现故障自动转移,为何不用GSLB[GSLB 是英文Global Server Load Balance的缩写,意思是全局负载均衡。]的dns和类似腾讯的TGW系统,因为没有自己的dns系统...),此时出现http的400错误。
检测办法:在nginx日志的access log中记录post请求的参数值,http://jackxiang.com/post/7728/ 。
发现:这个post的值根本没有取到。而直接绑定IP的就取到了,说明经过了cdn的数据均被干掉了。

而网上常常说是因为header太大引起:
nginx 400 Bad request是request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起。
每个请求头的长度也不能超过一块缓冲的容量,否则nginx返回错误400 (Bad Request)到客户端。

来自:http://www.linuxidc.com/Linux/2014-06/103685.htm


这个哥们的博客奇怪:
ail -f /opt/nginx/logs/access.log
    116.236.228.180 - - [15/Dec/2010:11:00:15 +0800] "-" 400 0 "-" "-"
    116.236.228.180 - - [15/Dec/2010:11:00:15 +0800] "-" 400 0 "-" "-"

网上大把的文章说是HTTP头/Cookie过大引起的,可以修改nginx.conf中两参数来修正.
代码如下:

    client_header_buffer_size 16k;
          large_client_header_buffers 4 32k;

修改后
代码如下:

    client_header_buffer_size 64k;
         large_client_header_buffers 4 64k;

没有效果,就算我把nginx0.7.62升到最新的0.8.54也没能解决.
在官方论坛中nginx作者提到空主机头不会返回自定义的状态码,是返回400错误.
http://forum.nginx.org/read.php?2,9695,11560
最后修正如下
改为原先的值
代码如下:

    client_header_buffer_size 16k;
         large_client_header_buffers 4 32k;

关闭默认主机的日志记录就可以解决问题
代码如下:

    server {
    listen *:80 default;
    server_name _;
    return 444;
    access_log   off;
    }



说是header过大,关掉日志解决问题,这种乐观主义我是见识到了,呵呵:
http://www.blogjava.net/xiaomage234/archive/2012/07/17/383329.html


Header长度太长,咱能不能打一下nginx的header?
在Nginx里面取这个HEAD用到的是$http_head参数,Nginx里面需要小写:
http://gunner.me/archives/363
背景: 磁盘没空间了,du -sh ./var/spool/clientmqueue   2.8G    ./var/spool/clientmqueue
____________________________________________________________________
今天收到nagios报警邮件,其中一台server中的磁盘分区空间超过95%,登录到服务器查看

[root@hadoop-node-29 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5              19G   16G  2.8G  95% /var

到目录/var查看哪个目录中的文件最大

[root@hadoop-node-29 var]# du -sh *

找到是/var/spool目录占了很大空间,进入spool目录继续查看 找到是clientmqueue目录中的文件很多占了大部分空间。

删除所有文件
[root@hadoop-node-29 clientmqueue]# rm -rf *
结果返回-bash: /bin/rm: Argument list too long

换用命令find . -print|xargs rm  过了一段时间终于删除了所有文件

不过这种方法只是治标不治本的方法。

为什么var/spool/clientmqueue会产生大量的文件呢,查资料是因为cron执行时会将相关结果以mail方式发送到执行用户的帐号,可是当sendmail 沒有启动 那么所有信件就会暂存在这个目录中,此时就会出现这种情况。

治本的方法是在cron 任务中的后面加上 > /dev/null 2>&1

例如

* * * * * /etc/init.d/snmp_cron.sh > /dev/null 2>&1

参考http://blog.xuite.net/david.welltake/home/45865306-%2Fvar%2Fspool%2Fclientmqueue+%E4%BD%94%E7%94%A8%E7%A3%81%E7%A2%9F%E7%A9%BA%E9%96%93%E7%9A%84%E5%95%8F%E9%A1%8C+linux
背景:对/下的文件大小作统计但想排除一些文件夹。
想计算一下/tmp的总空间,但想排除/tmp//tmp/ssh-sdgAM28929
du -h /tmp --exclude=/tmp/ssh-sdgAM28929

看起来--exclude=/tmp/ssh-sdgAM28929并没有工作
--exclude=PATTERN 不是一个路径,我觉得你可以--exclude="ssh-sdgAM28929"


[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda6              15G   14G     0 100% /
/dev/sda7             743G   67G  639G  10% /data
/dev/sda3              19G  5.2G   13G  29% /usr
/dev/sda2              19G  4.4G   14G  25% /var
/dev/sda1             494M   22M  447M   5% /boot
tmpfs                 7.9G  125M  7.8G   2% /dev/shm
10.70.32.53:/upload   796G   38G  717G   6% /upload

du -sh /* --exclude=/data --exclude=/usr --exclude=/var --exclude=/boot --exclude=/upload
7.0M    /bin
8.0K    /convert
125M    /dev
139M    /etc
244M    /home
196M    /lib
20M     /lib64
4.0K    /logs
16K     /lost+found
8.0K    /media
8.0K    /misc
12K     /mnt
8.0K    /net
0       /opt
4.0K    /playRecord.php
0       /proc
428M    /root
31M     /sbin
8.0K    /selinux
8.0K    /srv
4.0K    /sync
0       /sys
15M     /tmp

背景:前些天在淘宝上的一台vps出现了宕机,转载如下:【阿里云】尊敬的XXX@qq.com:您的云服务器(120.206.54.108)出现宕机,阿里云正在进行宕机保护性迁移,恢复时会第一时间通知您,谢谢。您好,您的ECS本地磁盘实例i-258cfosv4发生了宕机迁移,请您注意尽快恢复数据恢复业务。【阿里云】
一个Linux服务是基于centos7的,居然宕机了,这种情况要么是阿里云水平不行,要不就是linux不稳定导致,不管那么多,但从坚如磐石来讲,还得是FreeBSD,像之前的像邮件服务器啥的磁盘管理来讲都是用FreeBSD,后因为FreeBSD人越来越少(到现在FreeBSD连筹集个项目都只筹集到一半的钱,发动不起来。)推广问题等,像基于linux人相对多一些,大家都跑linux上了(Linux更符合Web的端的webserver和DB性能的需求变化),回想当我刚毕业时接受的就是FreeBSD,于是搜索了一下FreeBSD,发现阿里云也卖FreeBSD,不求其高性能,求其稳定如磐石即可,是我现在的一个新的需求。
——————————————————————————————————————————————————————————————————————————

     阿里云貌似最近推出了FreeBSD镜像,这是我最喜欢的操作系统,个人看法比Linux好太多了。但是阿里云方面文档没有跟上,无任何挂载硬盘相关的操作说明,所以记录一下在阿里云FreeBSD镜像环境下挂载云磁盘的操作过程。

用dmesg查看云硬盘在/dev的设备号,在xen环境的linux里是xvdb1,FreeBSD下通常是xbd1,由于xbd1未按照freebsd标准分区格式化,所以,如直接mount /dev/xbd1 /opt会报错,Invalid augument什么的。
分区格式化,先初始化磁盘
dd if=/dev/zero of=/dev/xbd1 bs=1k count=1
fdisk -BI /dev/xbd1 (完事会出来xbd1s1)
disklabel -B -w -r /dev/xbd1s1 auto
newfs /dev/xbd1s1
mount /dev/xbd1s1 /opt
echo "/dev/xbd1s1     /opt            ufs     rw      1       1" >> /etc/fstab,中间用tab分割

完成
--------20150806修订--------
FreeBSD 10取消pkg_add的等命令,用pkg代替,pkg安装在GFW环境下比较靠谱,中间曾发现rrdtool被GFW屏蔽,无法通过ports编译安装。

转载自:http://slaytanic.blog.51cto.com/2057708/1679151

很久很久以前,一个叫AT&T贝尔实验室的家族生下了一个叫Unix的婴儿。随着Unix的成长,大家都对Unix特别喜爱。贝尔实验室非常骄傲的到处拿Unix摆显。一个叫Berkeley的少女被贝尔吸引,一夜风流过后,Berkeley怀了孕,生下了BSD。
Unix和BSD都逐渐长大。AT&T发现Unix非常能挣钱,但是BSD却专门帮助人们而仅仅收取点感谢费。这样BSD名声渐大,严重影响了Unix的业务。于是AT&T找到Berkeley说BSD不是你一个人的,我是BSD的父亲,BSD不能这么给人办事不收费用。
而Berkeley却不领AT&T的情,说BSD在自己的家里长大,完全是自己的孩子。AT&T翻脸了,把Berkeley告到法庭要取得部分监护权。
官司一打就是十年。BSD就是被折磨了十年。人生能有几个十年?十年中,社会发生了巨大的变革,互联网风靡世界,PC机逐渐成了人们的日常工具,人们开始使用一种叫手机的东西通信。中国开始改革开放。苏联开始崩溃。而BSD只能呆在校园里望着校外的世界潮涨潮落,云卷云舒。
随着AT&T把自己的亲生孩子卖给了Novell。Novell决定迅速结束这场官司。于是最终官司庭外和解。Berkeley退还了一些当年贝尔送给自己的礼物。BSD的兄弟Unix改名System V,此后几经转手,最终社会的风霜将他雕刻成一个高冷的人。如今你会在少数高档场所见到他冷俊的面孔。
自由了的BSD被Berkeley重新打扮一番后,把他叫到面前说:如今你已经长大,不能在妈妈的家里闲着了,该到社会上闯荡了。
BSD满含着热泪离开了Berkeley。开始了他的社会生活。
BSD遇到了一个叫Sun的富家小姐,BSD秉承了他爹的基因,跟Sun一夜风流后,Sun生下了Solaris。
BSD在PC上建立了一个家,并把自己改名自由BSD(FreeBSD)。来纪念自己如同蹲监狱的十年屈辱时光。
有人想把他请到各种场所做客,那些场合他被叫做NetBSD。以及人们从NetBSD装扮出来的OpenBSD。
FreeBSD经过发展,名声渐大,在一次宴会中遇到了淫荡公主(Slut Princess)苹果。他们一见生情,几经来往后,Apple生下了OS X。OS X出现在苹果的各种社交场所。后来OS X又生下了iOS。iOS这个女人秉承了她奶奶的美丽与淫荡。各种装逼耍酷的场所,她都会出现。
FreeBSD跟Apple交往后,变得越发淫荡风流。跟原来的穷小子不一样了,穿着时尚,装逼耍酷样样都行。吸引了社会上的一些大姑娘小媳妇跃跃欲试。从此过上了没羞没臊的幸福生活。

这是个故事 与事实不符的地方:
AT&T 之所以给别人源代码是因为司法部的垄断协议,其不准经营电脑业务。
官司打了四年而非十年,不过这四年正是个人电脑疯狂发展的时机。
AT&T的unix命名为system v是在官司之前,而非之后。因为它被起诉垄断拆解成八个公司,当然这时它又可以经营电脑业务了。
Sun根据bsd做出的系统开始叫SunOS。远在官司之前。后来,他与at&t合作用System iv做出Solaris 2.0。并把以前的sunOS命名为Solaris 1.0
at&t固执的维护unix版权使其丧失开发活力。system v几经转手停止开发。其它厂商根据它开发了自己的系统比如Sun的Solaris,HP的HP-UX,IBM的AIX

来自:tieba.baidu.com/p/3653259841

今天用SSH连接我的远程主机,出现了以下错误:
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

网上查了一下,用

rm -rf .ssh/known_hosts

删除主机列表就行了。

删除的是连接方的主机即可:
mv /root/.ssh/known_hosts /root/.ssh/known_hosts.bak

来自:http://blog.csdn.net/westsource/article/details/6636096



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
b5:ea:d8:91:4e:98:b8:c7:af:55:c0:e4:68:ff:00:d3.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:104
RSA host key for 10.71.182.7* has changed and you have requested strict checking.
Host key verification failed.
分页: 9/23 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]