背景:个人博客因为升级chrome浏览器遇到的问题:配置nginx服务器完成后测试,360se,极速浏览器可以访问,但是FF,chrome不能,还好IE可以。
——————————————————————————————————————————————————————————————————————————
chrome版本40以上不支持SSLv3的解决办法:
今天接到业务反馈问题。
用chrome浏览器打不开我们的https网页。
原因是chrome版本号40以上的版本不支持SSLv3,我们需要在nginx的vhost里修改一下:
修改为:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
然后重起nginx
来自:http://blog.sina.com.cn/s/blog_5425edf40102vl8i.html
来自:http://blog.sina.com.cn/s/blog_5425edf40102vl8f.html
====================================================
实践如下,对里面的SSLv3去掉,再就是之前是MEDIUM,后在startssl升级为高级后也得修改为HIGH,:
server {
listen 443 ssl;
ssl on;
ssl_certificate ssl/justwinit.crt;
ssl_certificate_key ssl/justwinit.key;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
#ssl_ciphers MEDIUM:!aNULL:!MD5;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
————————————————————————————————————————————————
加上SSLv3也可以,实践发现出现ERR_SSL_VERSION_OR_CIPHER_MISMATC错的根本原因是因为:
ssl_ciphers MEDIUM:!aNULL:!MD5; ==》 ssl_ciphers HIGH:!aNULL:!MD5;导致没有对上号。
server {
listen 443 ssl;
ssl on;
ssl_certificate ssl/justwinit.crt;
ssl_certificate_key ssl/justwinit.key;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
#ssl_ciphers MEDIUM:!aNULL:!MD5;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
ssl_ciphers HIGH:!aNULL:!MD5;
====================================================
目前还未解决:
FF报错:连接 ****.cn 时发生错误。 无法安全地与对等端通信:没有双方共用的加密算法。 (错误码: ssl_error_no_cypher_overlap)
Chrome报错:A secure connection cannot be established because this site uses an unsupported protocol.
错误代码:ERR_SSL_VERSION_OR_CIPHER_MISMATCH
经同事帮忙查明原因,赶紧记录下:
在服务器/usr/local/nginx/conf/include/下的lvs 配置 lvscheck.****.net_ssl.conf 中 下面这行导致的,原因是FF,chrome不支持SSLv3。
ssl_protocols SSLv3 ;
参照其他正常的服务器修改为:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
批量替换,我是因为顺序写不一致,注意下顺序:
来自:http://blog.sina.com.cn/s/blog_40e1ba640102vctc.html
Chrome还是不行:
http://www.oschina.net/news/56603/chrome-will-disable-sslv3-support
FF:
查看网页信息,连接加密这一行上会有加密凡是,例如百度就是AES-128,进入about:config中搜索AES就可以了。
——————————————————————————————————————————————————————————————————————————
chrome版本40以上不支持SSLv3的解决办法:
今天接到业务反馈问题。
用chrome浏览器打不开我们的https网页。
原因是chrome版本号40以上的版本不支持SSLv3,我们需要在nginx的vhost里修改一下:
修改为:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
然后重起nginx
来自:http://blog.sina.com.cn/s/blog_5425edf40102vl8i.html
来自:http://blog.sina.com.cn/s/blog_5425edf40102vl8f.html
====================================================
实践如下,对里面的SSLv3去掉,再就是之前是MEDIUM,后在startssl升级为高级后也得修改为HIGH,:
server {
listen 443 ssl;
ssl on;
ssl_certificate ssl/justwinit.crt;
ssl_certificate_key ssl/justwinit.key;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
#ssl_ciphers MEDIUM:!aNULL:!MD5;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
————————————————————————————————————————————————
加上SSLv3也可以,实践发现出现ERR_SSL_VERSION_OR_CIPHER_MISMATC错的根本原因是因为:
ssl_ciphers MEDIUM:!aNULL:!MD5; ==》 ssl_ciphers HIGH:!aNULL:!MD5;导致没有对上号。
server {
listen 443 ssl;
ssl on;
ssl_certificate ssl/justwinit.crt;
ssl_certificate_key ssl/justwinit.key;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
#ssl_ciphers MEDIUM:!aNULL:!MD5;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
ssl_ciphers HIGH:!aNULL:!MD5;
====================================================
目前还未解决:
FF报错:连接 ****.cn 时发生错误。 无法安全地与对等端通信:没有双方共用的加密算法。 (错误码: ssl_error_no_cypher_overlap)
Chrome报错:A secure connection cannot be established because this site uses an unsupported protocol.
错误代码:ERR_SSL_VERSION_OR_CIPHER_MISMATCH
经同事帮忙查明原因,赶紧记录下:
在服务器/usr/local/nginx/conf/include/下的lvs 配置 lvscheck.****.net_ssl.conf 中 下面这行导致的,原因是FF,chrome不支持SSLv3。
ssl_protocols SSLv3 ;
参照其他正常的服务器修改为:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3;
批量替换,我是因为顺序写不一致,注意下顺序:
来自:http://blog.sina.com.cn/s/blog_40e1ba640102vctc.html
Chrome还是不行:
http://www.oschina.net/news/56603/chrome-will-disable-sslv3-support
FF:
查看网页信息,连接加密这一行上会有加密凡是,例如百度就是AES-128,进入about:config中搜索AES就可以了。
[实践OK]阿里云linux的vps内存占用太多导致kswapd0进程与events/0进程消耗大量CPU百分比高的问题,及重新分配swap空间,解决kswapd0长期占cpu但剩余的内存还有很多buffer不正常,LINUX 手动建立更大的虚拟缓存文件SWAP扩大文件及删除重建,vmstat判断系统性能等。
Unix/LinuxC技术 jackxiang 2016-2-23 22:26
背景:Memcached出现阻塞于/proc/sys/vm/swappiness值有关,登上昨天引发故障的那台memcached服务器,运行命令:cat /proc/sys/vm/swappiness 60
输出结果是60!磁盘IO高就是内存交换引起的!memcached堵车的原因就在这!只要将swappiness设置为0,就能解决问题,设置方法参考:Adjust Your swappiness。
/usr/local/php/bin/php -i|grep timeout
memcache.lock_timeout => 15 => 15
操作方法:
From:http://itindex.net/blog/2015/07/07/1436260380000.html
操作系统每过一定时间就会唤醒kswapd ,看看内存是否紧张,如果不紧张,则睡眠,在 kswapd 中,有2 个阀值, pages_hige和pages_low,当空闲内存页的数量低于 pages_low 的时候, kswapd进程就会扫描内存并且每次释放出32 个free pages,直到 free page 的数量到达pages_high.
通过检查vmstat 的输出结果,发现在那个时间段内,系统的页面换入换成现象很严重。
就是说,问题是内存紧张了,导致了交换分区频繁使用到。kswapd0 进程需要换入换出虚拟内存磁盘空间,导致了系统出现短时间摇摆。
http://mikixiyou.iteye.com/blog/1573976
背景:阿里云的VPS服务器里常常发现有一个Kswapd0的cpu有点高,升级了内核了也很高,于是原来是内存没有释放导致的,https://www.dba-china.com/topic/35:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
55 root 20 0 0 0 0 D 6.2 0.0 316:54.64 kswapd0
售后工程师 : 您好,linux 系统cpu占用异常请您参考:
https://help.aliyun.com/knowledge_detail/13129846.html
ECS如果无法远程连接,可以通过ECS的管理控制台中的“更多操作”里的“连接管理终端”连接服务器。使用方面的帮助,您可以参考:https://help.aliyun.com/document_detail/25433.html
获得当前系统中运行的最占内存的前10个程序:
ps aux | sort -k 6 -rn | head -n10
kswapd进程,就是虚拟内存管理进程,它的存在和占用CPU,即表明实际可用内存很少;而大量的si,so正是说明了这一点.这确实可能与你设置的内存段不合理有及大的关系。一旦使用到虚拟内存,IO读写一定会成为瓶颈。
http://www.linuxidc.com/wap.aspx?nid=64538&p=1&cp=1&cid=0
设置后还是不行,cpu下不来,只能是云盾了,[求助]阿里云ECScpu使用率经常跑满100%:
https://bbs.aliyun.com/read/260014.html?pos=17
1核 内存1G 带宽2m
网站日IP100+ pv1000+ 是小站
我用的wp控制面板 开了每30分钟备份一次数据库。
一个月前出现了一次cpu使用率100%的情况,找了淘宝上的大神 花了30元搞定,他的意思是我开的30分钟一次数据库备份的原因,让我关了。 我没有关。
10天前 又出现了一次cpu使用率跑满的情况,我自己登上阿里云主机,把 云盾 全体体检设置里的 深度扫描 和扫描都关了。cpu使用率立马降了下来。事后几天我又把云盾扫描 打开了。
今天凌晨 又出现一次cpu跑满100%的情况,我刚发现,把 云盾 全体体检设置里的 深度扫描 和扫描都关了 重启了服务器,10分钟后 cpu使用率恢复正常,网站正常。(事实上 我不清楚是重启服务器还是关了云盾扫描的原因才让网站恢复正常打开)
大家给个建议,这种情况 是我的配置低吗(如果是 是增加内存还是弄成双核 注意我的网站日ip100+ pv1000+ )
是我开的每30分钟备份一次数据库的原因吗(我的数据库比较重要,我希望高频次备份,如果有不需要高频次备份的方法 请指出)
是阿里云服务器 云盾 体检扫描的原因吗(我怀疑是,但是我是小白,不代表我的怀疑是正确的)
阿里云的大神们啊 请赐高见!!
这里有一个教程,但改版了,这个关闭功能好像给去了,目前找了下但是没有找到:http://xiedexu.cn/aliyun-close-yundun.htm
发现一个新的东西:服务器安全(安骑士)-->实例列表-->安全设置->有一个IP登录白名单和登录地进行修改的,还可以直接关闭安骑士。
实实在在的提个工单:
售后工程师 : 您的问题我们已收到,会尽快为您查看。请您耐心等待,谢谢
2016-03-16 11:02:48
售后工程师 : 您好,您可以参考以下说明解释:
http://help.aliyun.com/knowledge_detail/7591195.html
2016-03-16 11:06:23
jac***@aliyun.com : 这个链接也太大而化之了吧,free -m查看明明还剩下很多内存的啊。请工程师给实际勘察下,多谢了。
2016-03-16 11:26:02
售后工程师 : 我方转给后端专员查看下,请稍等
2016-03-16 11:28:35
售后工程师 : 您好,您这样试下
在vim /etc/sysctl.conf中添加
vm.min_free_kbytes = 22528
设置的小点然后sysctl -p生成,之后看下cpu使用情况
设置后重启后,今天好像好了,但不保证后面会不会好。
查了下:
min_free_kbytes
/proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。
32位系统,设vm.min_free_kbytes时,需注意lowmem的值:
http://blog.sina.com.cn/s/blog_69cc2f0b0100z0la.html
______________________________________________________________________________________________________________________
步骤一:设置分为永久和临时设置:
这个设置才好了,下面给的一个彻底取消swap的设置有问题,导致nginx启动不了,php也有些问题,如下:
(1)永久修改: /etc/sysctl.conf
vm.swappiness = 17
vm.min_free_kbytes = 22528
//vm.swappiness=20 //阿里去vps这个值差不多,但容易crontab的内存不段交换不够,一天后左右死机和它相关。
sysctl -p
. 临时性修改:[root@rhce ~]# sysctl vm.swappiness=10
(2)文件/proc/sys/vm/drop_caches设
置为1
、2、3,设置
多少直到
kswapd0不占用90%以上CPU,得结合前面步骤里的vm.swappiness=20块调整:
开机启动修改(这个玩法感觉没有太大价值,即使防crontab也一样):
/etc/rc.local
#解决kswapd0长期占cpu但剩余的内存还有很多buffer不正常
echo 1 >/proc/sys/vm/drop_caches [这个设置有一定效果,前面那个vm.swappiness=20,和10感觉根本没效果。]
/usr/sbin/sysctl vm.swappiness=10
————————————————————————————————————————————————————————————————
Nginx:
/usr/local/scripts/autoStartNginxEnterSSLKey.sh
nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 134217728) failed (12: Cannot allocate memory)
[root@iZ25dcp92ckZ ngx_fcgi_cache2]# cat /proc/swaps
Filename Type Size Used Priority
/swapfile file 1048572 0 -1
PHP:
[10-Jan-2016 21:35:21 Asia/Shanghai] PHP Fatal error: Out of memory (allocated 2097152) (tried to allocate 232245 bytes) in /data/htdocs/jackxiang.com/inc/boblog_class_run.php on line 548
重新分配:http://blog.csdn.net/wxqee/article/details/7970110
步骤一:dd if=/dev/zero of=/swapfile bs=2048 count=131072 (257M)
dd if=/dev/zero of=/swapfile bs=2048 count=196608 (385M)
dd if=/dev/zero of=/swapfile bs=2048 count=262144 (512M)
dd if=/dev/zero of=/swapfile bs=2048 count=327680 (641M)
dd if=/dev/zero of=/swapfile bs=2048 count=589824 (1.2G)
dd if=/dev/zero of=/swapfile bs=2048 count=720896 (1.4G)
在root提示符下,键入下面的命令,其中count大小等于所要求的块大小:
dd if=/dev/zero of=/swapfile bs=1024 count=65536
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,21.6104 秒,49.7 MB/秒
步骤二:mkswap /swapfile
[root@iZ25dcp92ckZ ngx_fcgi_cache2]# mkswap swapfile
[root@iZ25dcp92ckZ ~]# mkswap /swapfile
正在设置交换空间版本 1,大小 = 262140 KiB
无标签,UUID=80386ab9-4ce9-4608-8bd6-3315e80a212e
步骤三:swapon /swapfile 立即生效
[root@iZ25dcp92ckZ ngx_fcgi_cache2]# swapon swapfile
[root@iZ25dcp92ckZ ~]# swapon /swapfile
swapon: /swapfile:不安全的权限 0644,建议使用 0600。
[root@iZ25dcp92ckZ ~]# chmod 0600 /swapfile
步骤四:/swapfile swap swap defaults 0 0
在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行:
/swapfile swap swap defaults 0 0
步骤五:检查是否成功
cat /proc/swaps 或者free命令的输出来查看swap是否已打开。
[root@iZ25dcp92ckZ ~]# cat /proc/swaps
Filename Type Size Used Priority
/swapfile file 262140 0 -1
步骤六:建立错位置了,先停止swap分区并删除掉
1)先停止swap分区:
swapoff /swapfile
2)删除掉分区:
rm -Rf /swapfile
3)从fstab里删除掉:
修改/etc/fstab文件,把/swapfile swap swap defaults 0 0 这行删除。这样就能把手动增加的分区删除了。
请使用RHEL/CentOS 6.4及更新版本内核的MySQL同志们注意,vm.swappiness = 0的默认行为修改了,如果继续设置vm.swappiness = 0,有可能导致系统内存溢出,从而导致MySQL被意外kill掉。
扩展swap分区:http://blog.sina.com.cn/s/blog_779eecd8010124ta.html
在ubuntu 里面,swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端,对于ubuntu的默认设置,这个值等于60,建议修改为10。具体这样做:
1.查看你的系统里面的swappiness
$ cat /proc/sys/vm/swappiness
不出意外的话,你应该看到是 60
2.修改swappiness值为10
$ sudo sysctl vm.swappiness=10
但是这只是临时性的修改,在你重启系统后会恢复默认的60,所以,还要做一步:
$ gksudo gedit /etc/sysctl.conf
在这个文档的最后加上这样一行:
vm.swappiness=10
来自:http://blog.csdn.net/tianlangxiaoyue/article/details/7249484
http://blog.csdn.net/zhsh87/article/details/8954493
_________________________________________________________________________________________________________
1.kswapd0
Linux uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk.
(what is a page?)…Linux uses manages memory in units called pages.
So,the kswapd process regularly decreases the ages of unreferenced pages…and at the end they are paged out(moved out) to disk
系统每过一定时间就会唤醒kswapd,看看内存是否紧张,如果不紧张,则睡眠,在kswapd中,有2个阀值,pages_hige和pages_low,当空闲内存页的数量低于pages_low的时候,kswapd进程就会扫描内存并且每次释放出32个free pages,直到free page的数量到达pages_high.
内存16G,但buffer就占了11G之多,cache很少,不仅这样,swap也被占用了一部分,而且总在交换(kswapd0一直占cpu90%以上)。
服务器上只有apache和nfsd服务。用作图片服务器。
buffer占的内存无法回收(用命令:echo 3 >/proc/sys/vm/drop_caches)
Linux下清理内存和Cache方法,Linux下清理内存和Cache方法,修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加,这个设置有问题导致nginx和Php出现问题别千万直接粘贴:
如何让/etc/sysctl.conf修改永久生效:
写入到/etc/sysctl.conf就已经永久生效了,如果要让刚写入的立即也生效可以执行以下sysctl -p.
更多值:http://www.linuxidc.com/Linux/2010-03/24939.htm
阅读全文
输出结果是60!磁盘IO高就是内存交换引起的!memcached堵车的原因就在这!只要将swappiness设置为0,就能解决问题,设置方法参考:Adjust Your swappiness。
/usr/local/php/bin/php -i|grep timeout
memcache.lock_timeout => 15 => 15
操作方法:
From:http://itindex.net/blog/2015/07/07/1436260380000.html
操作系统每过一定时间就会唤醒kswapd ,看看内存是否紧张,如果不紧张,则睡眠,在 kswapd 中,有2 个阀值, pages_hige和pages_low,当空闲内存页的数量低于 pages_low 的时候, kswapd进程就会扫描内存并且每次释放出32 个free pages,直到 free page 的数量到达pages_high.
通过检查vmstat 的输出结果,发现在那个时间段内,系统的页面换入换成现象很严重。
就是说,问题是内存紧张了,导致了交换分区频繁使用到。kswapd0 进程需要换入换出虚拟内存磁盘空间,导致了系统出现短时间摇摆。
http://mikixiyou.iteye.com/blog/1573976
背景:阿里云的VPS服务器里常常发现有一个Kswapd0的cpu有点高,升级了内核了也很高,于是原来是内存没有释放导致的,https://www.dba-china.com/topic/35:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
55 root 20 0 0 0 0 D 6.2 0.0 316:54.64 kswapd0
售后工程师 : 您好,linux 系统cpu占用异常请您参考:
https://help.aliyun.com/knowledge_detail/13129846.html
ECS如果无法远程连接,可以通过ECS的管理控制台中的“更多操作”里的“连接管理终端”连接服务器。使用方面的帮助,您可以参考:https://help.aliyun.com/document_detail/25433.html
获得当前系统中运行的最占内存的前10个程序:
ps aux | sort -k 6 -rn | head -n10
kswapd进程,就是虚拟内存管理进程,它的存在和占用CPU,即表明实际可用内存很少;而大量的si,so正是说明了这一点.这确实可能与你设置的内存段不合理有及大的关系。一旦使用到虚拟内存,IO读写一定会成为瓶颈。
http://www.linuxidc.com/wap.aspx?nid=64538&p=1&cp=1&cid=0
设置后还是不行,cpu下不来,只能是云盾了,[求助]阿里云ECScpu使用率经常跑满100%:
https://bbs.aliyun.com/read/260014.html?pos=17
1核 内存1G 带宽2m
网站日IP100+ pv1000+ 是小站
我用的wp控制面板 开了每30分钟备份一次数据库。
一个月前出现了一次cpu使用率100%的情况,找了淘宝上的大神 花了30元搞定,他的意思是我开的30分钟一次数据库备份的原因,让我关了。 我没有关。
10天前 又出现了一次cpu使用率跑满的情况,我自己登上阿里云主机,把 云盾 全体体检设置里的 深度扫描 和扫描都关了。cpu使用率立马降了下来。事后几天我又把云盾扫描 打开了。
今天凌晨 又出现一次cpu跑满100%的情况,我刚发现,把 云盾 全体体检设置里的 深度扫描 和扫描都关了 重启了服务器,10分钟后 cpu使用率恢复正常,网站正常。(事实上 我不清楚是重启服务器还是关了云盾扫描的原因才让网站恢复正常打开)
大家给个建议,这种情况 是我的配置低吗(如果是 是增加内存还是弄成双核 注意我的网站日ip100+ pv1000+ )
是我开的每30分钟备份一次数据库的原因吗(我的数据库比较重要,我希望高频次备份,如果有不需要高频次备份的方法 请指出)
是阿里云服务器 云盾 体检扫描的原因吗(我怀疑是,但是我是小白,不代表我的怀疑是正确的)
阿里云的大神们啊 请赐高见!!
这里有一个教程,但改版了,这个关闭功能好像给去了,目前找了下但是没有找到:http://xiedexu.cn/aliyun-close-yundun.htm
发现一个新的东西:服务器安全(安骑士)-->实例列表-->安全设置->有一个IP登录白名单和登录地进行修改的,还可以直接关闭安骑士。
实实在在的提个工单:
售后工程师 : 您的问题我们已收到,会尽快为您查看。请您耐心等待,谢谢
2016-03-16 11:02:48
售后工程师 : 您好,您可以参考以下说明解释:
http://help.aliyun.com/knowledge_detail/7591195.html
2016-03-16 11:06:23
jac***@aliyun.com : 这个链接也太大而化之了吧,free -m查看明明还剩下很多内存的啊。请工程师给实际勘察下,多谢了。
2016-03-16 11:26:02
售后工程师 : 我方转给后端专员查看下,请稍等
2016-03-16 11:28:35
售后工程师 : 您好,您这样试下
在vim /etc/sysctl.conf中添加
vm.min_free_kbytes = 22528
设置的小点然后sysctl -p生成,之后看下cpu使用情况
设置后重启后,今天好像好了,但不保证后面会不会好。
查了下:
min_free_kbytes
/proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。
32位系统,设vm.min_free_kbytes时,需注意lowmem的值:
http://blog.sina.com.cn/s/blog_69cc2f0b0100z0la.html
______________________________________________________________________________________________________________________
步骤一:设置分为永久和临时设置:
这个设置才好了,下面给的一个彻底取消swap的设置有问题,导致nginx启动不了,php也有些问题,如下:
(1)永久修改: /etc/sysctl.conf
vm.swappiness = 17
vm.min_free_kbytes = 22528
//vm.swappiness=20 //阿里去vps这个值差不多,但容易crontab的内存不段交换不够,一天后左右死机和它相关。
sysctl -p
. 临时性修改:[root@rhce ~]# sysctl vm.swappiness=10
(2)文件/proc/sys/vm/drop_caches设
置为1
、2、3,设置
多少直到
kswapd0不占用90%以上CPU,得结合前面步骤里的vm.swappiness=20块调整:
开机启动修改(这个玩法感觉没有太大价值,即使防crontab也一样):
/etc/rc.local
#解决kswapd0长期占cpu但剩余的内存还有很多buffer不正常
echo 1 >/proc/sys/vm/drop_caches [这个设置有一定效果,前面那个vm.swappiness=20,和10感觉根本没效果。]
/usr/sbin/sysctl vm.swappiness=10
————————————————————————————————————————————————————————————————
Nginx:
/usr/local/scripts/autoStartNginxEnterSSLKey.sh
nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 134217728) failed (12: Cannot allocate memory)
[root@iZ25dcp92ckZ ngx_fcgi_cache2]# cat /proc/swaps
Filename Type Size Used Priority
/swapfile file 1048572 0 -1
PHP:
[10-Jan-2016 21:35:21 Asia/Shanghai] PHP Fatal error: Out of memory (allocated 2097152) (tried to allocate 232245 bytes) in /data/htdocs/jackxiang.com/inc/boblog_class_run.php on line 548
重新分配:http://blog.csdn.net/wxqee/article/details/7970110
步骤一:dd if=/dev/zero of=/swapfile bs=2048 count=131072 (257M)
dd if=/dev/zero of=/swapfile bs=2048 count=196608 (385M)
dd if=/dev/zero of=/swapfile bs=2048 count=262144 (512M)
dd if=/dev/zero of=/swapfile bs=2048 count=327680 (641M)
dd if=/dev/zero of=/swapfile bs=2048 count=589824 (1.2G)
dd if=/dev/zero of=/swapfile bs=2048 count=720896 (1.4G)
在root提示符下,键入下面的命令,其中count大小等于所要求的块大小:
dd if=/dev/zero of=/swapfile bs=1024 count=65536
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,21.6104 秒,49.7 MB/秒
步骤二:mkswap /swapfile
[root@iZ25dcp92ckZ ngx_fcgi_cache2]# mkswap swapfile
[root@iZ25dcp92ckZ ~]# mkswap /swapfile
正在设置交换空间版本 1,大小 = 262140 KiB
无标签,UUID=80386ab9-4ce9-4608-8bd6-3315e80a212e
步骤三:swapon /swapfile 立即生效
[root@iZ25dcp92ckZ ngx_fcgi_cache2]# swapon swapfile
[root@iZ25dcp92ckZ ~]# swapon /swapfile
swapon: /swapfile:不安全的权限 0644,建议使用 0600。
[root@iZ25dcp92ckZ ~]# chmod 0600 /swapfile
步骤四:/swapfile swap swap defaults 0 0
在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行:
/swapfile swap swap defaults 0 0
步骤五:检查是否成功
cat /proc/swaps 或者free命令的输出来查看swap是否已打开。
[root@iZ25dcp92ckZ ~]# cat /proc/swaps
Filename Type Size Used Priority
/swapfile file 262140 0 -1
步骤六:建立错位置了,先停止swap分区并删除掉
1)先停止swap分区:
swapoff /swapfile
2)删除掉分区:
rm -Rf /swapfile
3)从fstab里删除掉:
修改/etc/fstab文件,把/swapfile swap swap defaults 0 0 这行删除。这样就能把手动增加的分区删除了。
请使用RHEL/CentOS 6.4及更新版本内核的MySQL同志们注意,vm.swappiness = 0的默认行为修改了,如果继续设置vm.swappiness = 0,有可能导致系统内存溢出,从而导致MySQL被意外kill掉。
扩展swap分区:http://blog.sina.com.cn/s/blog_779eecd8010124ta.html
在ubuntu 里面,swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端,对于ubuntu的默认设置,这个值等于60,建议修改为10。具体这样做:
1.查看你的系统里面的swappiness
$ cat /proc/sys/vm/swappiness
不出意外的话,你应该看到是 60
2.修改swappiness值为10
$ sudo sysctl vm.swappiness=10
但是这只是临时性的修改,在你重启系统后会恢复默认的60,所以,还要做一步:
$ gksudo gedit /etc/sysctl.conf
在这个文档的最后加上这样一行:
vm.swappiness=10
来自:http://blog.csdn.net/tianlangxiaoyue/article/details/7249484
http://blog.csdn.net/zhsh87/article/details/8954493
_________________________________________________________________________________________________________
1.kswapd0
Linux uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk.
(what is a page?)…Linux uses manages memory in units called pages.
So,the kswapd process regularly decreases the ages of unreferenced pages…and at the end they are paged out(moved out) to disk
系统每过一定时间就会唤醒kswapd,看看内存是否紧张,如果不紧张,则睡眠,在kswapd中,有2个阀值,pages_hige和pages_low,当空闲内存页的数量低于pages_low的时候,kswapd进程就会扫描内存并且每次释放出32个free pages,直到free page的数量到达pages_high.
内存16G,但buffer就占了11G之多,cache很少,不仅这样,swap也被占用了一部分,而且总在交换(kswapd0一直占cpu90%以上)。
服务器上只有apache和nfsd服务。用作图片服务器。
buffer占的内存无法回收(用命令:echo 3 >/proc/sys/vm/drop_caches)
Linux下清理内存和Cache方法,Linux下清理内存和Cache方法,修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加,这个设置有问题导致nginx和Php出现问题别千万直接粘贴:
如何让/etc/sysctl.conf修改永久生效:
写入到/etc/sysctl.conf就已经永久生效了,如果要让刚写入的立即也生效可以执行以下sysctl -p.
更多值:http://www.linuxidc.com/Linux/2010-03/24939.htm
阅读全文
背景:http2是一个二进制协议:调试这样的协议将需要curl这样的工具,要进一步地分析网络数据流需要类似Wireshark的http2解析器。
键是浏览器的支持非常好,无论开多少标签页,都是复用1个链接。高版本IE也是支持的。http2还要一段时间才能铺开。
HTTP/2笔记之流和多路复用:
http://www.blogjava.net/yongboy/archive/2015/03/19/423611.aspx
除开头压缩外,还有省流量还有:
哈夫曼编码更安全:
HTTPS和SPDY的压缩机制被发现有受BREACH和CRIME攻击的隐患。通过向流中注入一些已知的文本来观察输出的变化,攻击者可以推出原始发送的数据。
为协议的动态内容进行压缩并使其免于被攻击,需要仔细且全面的考虑。而这正是HTTPbis小组尝试去做的。
HPACK,HTTP/2头部压缩,顾名思义它是一个专为http2头部设计的压缩格式。确切的讲,它甚至被制定写入在另外一个单独的草案里。新的格式同时引入了一些其他对策让破解压缩变得困难,例如采用帧的可选填充和用一个bit作为标记,来让中间人不压缩指定的头部。
用Roberto Peon(HPACK的设计者之一)的话说,“HPACK旨在提供一个一致性的实现使信息量的损失尽可能少,使编解码快速而方便,使接收方能控制压缩文本的大小,允许代理重新建立索引(如,通过代理在前后端共享状态),以及对哈夫曼编码串的更快速比较”。
发出content-lenth可后悔:
HTTP 1.1的有一个缺点是:当一个含有确切值的Content-Length的HTTP消息被送出之后,你就很难中断它了。当然,通常你可以断开整个TCP链接(但也不总是可以这样),但这样导致的代价就是需要重新通过三次握手建立一个新的TCP连接。
一个更好的方案是只终止当前传输的消息并重新发送一个新的。在http2里面,我们可以通过发送RST_STREAM帧来实现这种需求,从而避免浪费带宽和中断已有的连接。
HTTP2讲解:
http://www.kancloud.cn/kancloud/http2-explained/49803
HTTP2技术变革的冲击和影响分析:
http://blog.csdn.net/jiayanhui2877/article/details/45395771
Http2.0的RFC文档,有兴趣可以去看看:
http://httpwg.org/specs/rfc7540.html
键是浏览器的支持非常好,无论开多少标签页,都是复用1个链接。高版本IE也是支持的。http2还要一段时间才能铺开。
HTTP/2笔记之流和多路复用:
http://www.blogjava.net/yongboy/archive/2015/03/19/423611.aspx
除开头压缩外,还有省流量还有:
哈夫曼编码更安全:
HTTPS和SPDY的压缩机制被发现有受BREACH和CRIME攻击的隐患。通过向流中注入一些已知的文本来观察输出的变化,攻击者可以推出原始发送的数据。
为协议的动态内容进行压缩并使其免于被攻击,需要仔细且全面的考虑。而这正是HTTPbis小组尝试去做的。
HPACK,HTTP/2头部压缩,顾名思义它是一个专为http2头部设计的压缩格式。确切的讲,它甚至被制定写入在另外一个单独的草案里。新的格式同时引入了一些其他对策让破解压缩变得困难,例如采用帧的可选填充和用一个bit作为标记,来让中间人不压缩指定的头部。
用Roberto Peon(HPACK的设计者之一)的话说,“HPACK旨在提供一个一致性的实现使信息量的损失尽可能少,使编解码快速而方便,使接收方能控制压缩文本的大小,允许代理重新建立索引(如,通过代理在前后端共享状态),以及对哈夫曼编码串的更快速比较”。
发出content-lenth可后悔:
HTTP 1.1的有一个缺点是:当一个含有确切值的Content-Length的HTTP消息被送出之后,你就很难中断它了。当然,通常你可以断开整个TCP链接(但也不总是可以这样),但这样导致的代价就是需要重新通过三次握手建立一个新的TCP连接。
一个更好的方案是只终止当前传输的消息并重新发送一个新的。在http2里面,我们可以通过发送RST_STREAM帧来实现这种需求,从而避免浪费带宽和中断已有的连接。
HTTP2讲解:
http://www.kancloud.cn/kancloud/http2-explained/49803
HTTP2技术变革的冲击和影响分析:
http://blog.csdn.net/jiayanhui2877/article/details/45395771
Http2.0的RFC文档,有兴趣可以去看看:
http://httpwg.org/specs/rfc7540.html
[实践OK]Raspberry pi 的FreeBSD11系统下成功安装swoole扩展。及出现Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.
Unix/LinuxC技术 jackxiang 2016-2-21 13:10
Raspberry Pi在FreeBSD下试图编译swoole扩展出现如下问题:
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
解决办法:
pkg install autoconf
pkg install m4
CentOS:
yum install m4 -y
yum install autoconf -y
重新编译:
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # phpize
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # ./configure
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # make && make install
/usr/local/include/php/ext/pcre/php_pcre.h:29:10: fatal error: 'pcre.h' file not found
其实这是由于缺少了pcre开发包所导致的,既然缺少那就装上吧:-),我是在Debian环境下当然想通过apt-get这个命令解决问题了,不过搜索了网络,只找到了CentOS的yum命令:
yum update
yum install pcre-devel
好吧,我只有依葫芦画瓢,把yum直接改成apt-get,不过apt-get install pcre-devel这步出错了,找不到包,仔细搜索了网络才知道,原来Debian系下不叫这个名字,正确的命令如下:
apt-get update
apt-get install libpcre3 libpcre3-dev
这样折腾一下,然后再pecl install apc一次,好了,成功安装了!
FreeBSD呢? 试一试:pkg install pcre-devel 发现没有于是再度下:pkg install libpcre3 libpcre3-dev ,也没有。
看下pcre有没有最新,再看下:
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # pkg install pcre
Updating rpi repository catalogue...
rpi repository is up-to-date.
All repositories are up-to-date.
Checking integrity... done (0 conflicting)
The most recent version of packages are already installed
于是按:mac 10.10.3下安装Swoole扩展,提示pcre.h文件找不到:https://segmentfault.com/q/1010000002886696
正如@韩天峰 所说,你需要pcre扩展库文件,按照swoole的默认安装,程序会在/usr/local以及php include_path里面取搜索,事实上在安装pcre的时候你已经安装了这个库文件。
大概的位置/opt/local/include/pcre.h,所以你需要做一个软链
sudo ln -s /opt/local/include/pcre.h /usr/include/
如果没在这个位置你就搜索一下find / -name pcre,然后软链过去
真正实践OK的办法是:
./configure --with-php-config=/usr/local/bin/php-config //这样也是不行的。
root@rpi2:/ # find . -name "pcre.h"
./usr/local/include/pcre.h
这行是关键:
ln -s /usr/local/include/pcre.h /usr/include/pcre.h
就可以编译通过了,并生成了swoole.so,如下:
----------------------------------------------------------------------
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/lib/php/20131226-zts/
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # ls /usr/local/lib/php/20131226-zts/
swoole.so
root@rpi2:/usr/local/etc # cp php.ini-development php.ini
extension=swoole.so
root@rpi2:/usr/local/etc # php -m
[PHP Modules]
swoole
试一下程序:
httpServer.php: new file: 17 lines, 451 characters.
root@rpi2:~/php # php httpServer.php
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(3, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(4, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(5, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(6, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(7, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(8, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(9, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(10, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
root@rpi2:~/php # netstat
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 78 0 localhost.9502 localhost.24050 CLOSE_WAI
root@rpi2:~/php # telnet localhost 9502
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
root@rpi2:~/php # curl "http://127.0.0.1:9502"
出现:
php httpServer.php
[2016-02-18 06:55:17 #13407.0] WARN swServer_signal_hanlder: Fatal Error: manager process exit. status=0, signal=0.
[2016-02-18 06:55:23 $13408.0] WARN swManager_check_exit_status: worker#2 abnormal exit, status=0, signal=11
[2016-02-18 06:55:31 $13408.0] WARN swManager_check_exit_status: worker#1 abnormal exit, status=0, signal=11
[2016-02-18 06:55:38 $13408.0] WARN swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
[2016-02-18 06:55:42 $13408.0] WARN swManager_check_exit_status: worker#2 abnormal exit, status=0, signal=11
——————————————缺少安装包来自———————————————————————
运行/usr/local/webserver/php/bin/phpize时出现:
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
根据网上的解决办法是:
# cd /usr/src
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
# tar -zvxf m4-1.4.9.tar.gz
# cd m4-1.4.9/
# ./configure && make && make install
# cd ../
# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
# tar -zvxf autoconf-2.62.tar.gz
# cd autoconf-2.62/
# ./configure && make && make install
更简单的办法
# yum install m4
# yum install autoconf
来自:http://blog.csdn.net/21aspnet/article/details/7471574
问题二:swoole error: use of undeclared identifier 'SIOCGIFHWADDR':
http://group.swoole.com/question/106871
替换:https://github.com/swoole/swoole-src/blob/9eaaf1382c7578933dac3fad143033d1bd8c085f/swoole.c
问题三:
https://github.com/swoole/swoole-src/issues/1347
swoole-src-1.9.19/src/network/Port.c:712:41: error: invalid operands to binary expression ('time_t'
(aka 'long') and 'char *(*)(int, int)')
if (date_format && mktime(&tm3) - timezone >= file_mtime)
~~~~~~~~~~~~ ^ ~~~~~~~~
1 error generated.
*** Error code 1
修复:https://github.com/swoole/swoole-src/commit/607256a4b3796c1c0ade648379b50fdf815947a5
代码:https://github.com/swoole/swoole-src/blob/607256a4b3796c1c0ade648379b50fdf815947a5/src/network/Port.c
编译成功@11.1-RELEASE FreeBSD 11.1-RELEASE:
creating ./swoole.la
(cd ./.libs && rm -f swoole.la && ln -s ../swoole.la swoole.la)
/bin/sh /tmp/swoole-src-1.9.19/libtool --mode=install cp ./swoole.la /tmp/swoole-src-1.9.19/modules
cp ./.libs/swoole.so /tmp/swoole-src-1.9.19/modules/swoole.so
cp ./.libs/swoole.lai /tmp/swoole-src-1.9.19/modules/swoole.la
php -i | grep extension
extension_dir => /usr/local/php/ext/ => /usr/local/php/ext/
cp -rf /tmp/swoole-src-1.9.19/modules/swoole.so /usr/local/php/ext/
vi /usr/local/etc/php.ini
extension=swoole.so
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
解决办法:
pkg install autoconf
pkg install m4
CentOS:
yum install m4 -y
yum install autoconf -y
重新编译:
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # phpize
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # ./configure
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # make && make install
/usr/local/include/php/ext/pcre/php_pcre.h:29:10: fatal error: 'pcre.h' file not found
其实这是由于缺少了pcre开发包所导致的,既然缺少那就装上吧:-),我是在Debian环境下当然想通过apt-get这个命令解决问题了,不过搜索了网络,只找到了CentOS的yum命令:
yum update
yum install pcre-devel
好吧,我只有依葫芦画瓢,把yum直接改成apt-get,不过apt-get install pcre-devel这步出错了,找不到包,仔细搜索了网络才知道,原来Debian系下不叫这个名字,正确的命令如下:
apt-get update
apt-get install libpcre3 libpcre3-dev
这样折腾一下,然后再pecl install apc一次,好了,成功安装了!
FreeBSD呢? 试一试:pkg install pcre-devel 发现没有于是再度下:pkg install libpcre3 libpcre3-dev ,也没有。
看下pcre有没有最新,再看下:
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # pkg install pcre
Updating rpi repository catalogue...
rpi repository is up-to-date.
All repositories are up-to-date.
Checking integrity... done (0 conflicting)
The most recent version of packages are already installed
于是按:mac 10.10.3下安装Swoole扩展,提示pcre.h文件找不到:https://segmentfault.com/q/1010000002886696
正如@韩天峰 所说,你需要pcre扩展库文件,按照swoole的默认安装,程序会在/usr/local以及php include_path里面取搜索,事实上在安装pcre的时候你已经安装了这个库文件。
大概的位置/opt/local/include/pcre.h,所以你需要做一个软链
sudo ln -s /opt/local/include/pcre.h /usr/include/
如果没在这个位置你就搜索一下find / -name pcre,然后软链过去
真正实践OK的办法是:
./configure --with-php-config=/usr/local/bin/php-config //这样也是不行的。
root@rpi2:/ # find . -name "pcre.h"
./usr/local/include/pcre.h
这行是关键:
ln -s /usr/local/include/pcre.h /usr/include/pcre.h
就可以编译通过了,并生成了swoole.so,如下:
----------------------------------------------------------------------
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/lib/php/20131226-zts/
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # ls /usr/local/lib/php/20131226-zts/
swoole.so
root@rpi2:/usr/local/etc # cp php.ini-development php.ini
extension=swoole.so
root@rpi2:/usr/local/etc # php -m
[PHP Modules]
swoole
试一下程序:
httpServer.php: new file: 17 lines, 451 characters.
root@rpi2:~/php # php httpServer.php
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(3, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(4, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(5, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(6, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(7, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(8, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(9, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0] WARN swSocket_set_buffer_size(:333): setsockopt(10, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
root@rpi2:~/php # netstat
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 78 0 localhost.9502 localhost.24050 CLOSE_WAI
root@rpi2:~/php # telnet localhost 9502
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
root@rpi2:~/php # curl "http://127.0.0.1:9502"
出现:
php httpServer.php
[2016-02-18 06:55:17 #13407.0] WARN swServer_signal_hanlder: Fatal Error: manager process exit. status=0, signal=0.
[2016-02-18 06:55:23 $13408.0] WARN swManager_check_exit_status: worker#2 abnormal exit, status=0, signal=11
[2016-02-18 06:55:31 $13408.0] WARN swManager_check_exit_status: worker#1 abnormal exit, status=0, signal=11
[2016-02-18 06:55:38 $13408.0] WARN swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
[2016-02-18 06:55:42 $13408.0] WARN swManager_check_exit_status: worker#2 abnormal exit, status=0, signal=11
——————————————缺少安装包来自———————————————————————
运行/usr/local/webserver/php/bin/phpize时出现:
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
根据网上的解决办法是:
# cd /usr/src
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
# tar -zvxf m4-1.4.9.tar.gz
# cd m4-1.4.9/
# ./configure && make && make install
# cd ../
# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
# tar -zvxf autoconf-2.62.tar.gz
# cd autoconf-2.62/
# ./configure && make && make install
更简单的办法
# yum install m4
# yum install autoconf
来自:http://blog.csdn.net/21aspnet/article/details/7471574
问题二:swoole error: use of undeclared identifier 'SIOCGIFHWADDR':
http://group.swoole.com/question/106871
替换:https://github.com/swoole/swoole-src/blob/9eaaf1382c7578933dac3fad143033d1bd8c085f/swoole.c
问题三:
https://github.com/swoole/swoole-src/issues/1347
swoole-src-1.9.19/src/network/Port.c:712:41: error: invalid operands to binary expression ('time_t'
(aka 'long') and 'char *(*)(int, int)')
if (date_format && mktime(&tm3) - timezone >= file_mtime)
~~~~~~~~~~~~ ^ ~~~~~~~~
1 error generated.
*** Error code 1
修复:https://github.com/swoole/swoole-src/commit/607256a4b3796c1c0ade648379b50fdf815947a5
代码:https://github.com/swoole/swoole-src/blob/607256a4b3796c1c0ade648379b50fdf815947a5/src/network/Port.c
编译成功@11.1-RELEASE FreeBSD 11.1-RELEASE:
creating ./swoole.la
(cd ./.libs && rm -f swoole.la && ln -s ../swoole.la swoole.la)
/bin/sh /tmp/swoole-src-1.9.19/libtool --mode=install cp ./swoole.la /tmp/swoole-src-1.9.19/modules
cp ./.libs/swoole.so /tmp/swoole-src-1.9.19/modules/swoole.so
cp ./.libs/swoole.lai /tmp/swoole-src-1.9.19/modules/swoole.la
php -i | grep extension
extension_dir => /usr/local/php/ext/ => /usr/local/php/ext/
cp -rf /tmp/swoole-src-1.9.19/modules/swoole.so /usr/local/php/ext/
vi /usr/local/etc/php.ini
extension=swoole.so
1. 现象
放假期间收到zabbix报警,提示主站访问不了,报502。
2.排查思路及过程
因为是过年休息,放假前又没有更新,基本可以排除是更新和配置导致的问题。ssh连上服务器发现服务器连接和资源都没问题。这是一套lnamp架构的网站,就是nginx反向代理到Apache,所以考虑是Apache的问题,于是重启httpd服务。
重启httpd服务的时候启动失败,没有看到错误,所以去查看日志文件,看到如下报错:
tail -200 /var/log/httpd/error_log
[TIME 2016] [error] SSL Library Error: -8181 Certificate has expired
[TIME 2016] [error] Unable to verify certificate 'Server-Cert'. Add "NSSEnforceValidCerts off" to nss.conf so the server can start until the problem can be resolved.
可以看到是证书过期了,并且给出了一种解决方法是添加‘NSSEnforceValidCerts off’到nss.conf服务器就可以启动,就是不验证证书过期时间。
Apache是用https需要mod_nss的模块支持,我的理解就是使用https需要安装mod_nss,下面给一个官方说明:
The mod_nss module provides strong cryptography for the Apache Web server via the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols using the Network Security Services (NSS) security library.
我的解决方法是重新生成新的证书
cd /etc/httpd/alias
#删除旧的证书
rm -f *.db
#创建新证书
/usr/sbin/gencert /etc/httpd/alias > /etc/httpd/alias/install.log 2>&1
#查看证书信息
certutil -d /etc/httpd/alias -L -n Server-Cert
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 3 (0x3)
Signature Algorithm: PKCS #1 SHA-1 With RSA Encryption
Issuer: "CN=Certificate Shack,O=example.com,C=US"
Validity:
Not Before: Mon Feb 15 02:05:10 2016
Not After : Sat Feb 15 02:05:10 2020
现在可以看到证书的有效期是4年,新生成的证书到2020年过期。httpd服务可以正常启动。
启动httpd服务后发现首页还是不能访问,可以确认服务都正常启动配置没有问题。继续查看httpd的错误日志发现了新的报错:
[TIME 2016] [error] SSL Library Error: -8038 SEC\_ERROR\_NOT\_INITIALIZED
[TIME 2016] [error] NSS_Initialize failed. Certificate database: /etc/httpd/alias.
百度了下发现是权限问题,重新授下权搞定。
chown root.apache /etc/httpd/alias/*.db
chmod 0640 /etc/httpd/alias/*.db
摘自解决一次由于SSL证书到期导致的网站不能访问的问题(Nginx,php,Apache):http://branguo.blog.51cto.com/9768383/1742157
放假期间收到zabbix报警,提示主站访问不了,报502。
2.排查思路及过程
因为是过年休息,放假前又没有更新,基本可以排除是更新和配置导致的问题。ssh连上服务器发现服务器连接和资源都没问题。这是一套lnamp架构的网站,就是nginx反向代理到Apache,所以考虑是Apache的问题,于是重启httpd服务。
重启httpd服务的时候启动失败,没有看到错误,所以去查看日志文件,看到如下报错:
tail -200 /var/log/httpd/error_log
[TIME 2016] [error] SSL Library Error: -8181 Certificate has expired
[TIME 2016] [error] Unable to verify certificate 'Server-Cert'. Add "NSSEnforceValidCerts off" to nss.conf so the server can start until the problem can be resolved.
可以看到是证书过期了,并且给出了一种解决方法是添加‘NSSEnforceValidCerts off’到nss.conf服务器就可以启动,就是不验证证书过期时间。
Apache是用https需要mod_nss的模块支持,我的理解就是使用https需要安装mod_nss,下面给一个官方说明:
The mod_nss module provides strong cryptography for the Apache Web server via the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols using the Network Security Services (NSS) security library.
我的解决方法是重新生成新的证书
cd /etc/httpd/alias
#删除旧的证书
rm -f *.db
#创建新证书
/usr/sbin/gencert /etc/httpd/alias > /etc/httpd/alias/install.log 2>&1
#查看证书信息
certutil -d /etc/httpd/alias -L -n Server-Cert
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 3 (0x3)
Signature Algorithm: PKCS #1 SHA-1 With RSA Encryption
Issuer: "CN=Certificate Shack,O=example.com,C=US"
Validity:
Not Before: Mon Feb 15 02:05:10 2016
Not After : Sat Feb 15 02:05:10 2020
现在可以看到证书的有效期是4年,新生成的证书到2020年过期。httpd服务可以正常启动。
启动httpd服务后发现首页还是不能访问,可以确认服务都正常启动配置没有问题。继续查看httpd的错误日志发现了新的报错:
[TIME 2016] [error] SSL Library Error: -8038 SEC\_ERROR\_NOT\_INITIALIZED
[TIME 2016] [error] NSS_Initialize failed. Certificate database: /etc/httpd/alias.
百度了下发现是权限问题,重新授下权搞定。
chown root.apache /etc/httpd/alias/*.db
chmod 0640 /etc/httpd/alias/*.db
摘自解决一次由于SSL证书到期导致的网站不能访问的问题(Nginx,php,Apache):http://branguo.blog.51cto.com/9768383/1742157
背景:Raspberry Pi下的FreeBSD关机时候出现:
========================================================
刚搞uboot 学习下 写下来这些自己的小经验
我的终端用的是SecureCRT.exe
烧写uboot后 提示 Hit any key to stop autoboot : 几秒后 aoto运行
如果没有设置好 按键是没有用的 解决方法是:
选择 你打开的串口的会话设置 再选择 键映射 当然还有其他的方法 这里你映射几个键 既可以了
来自:http://blog.sina.com.cn/s/blog_6b94d5680100ms8g.html
SecureCRT 更改键盘映射功能 : http://blog.chinaunix.net/uid-20773865-id-4040702.html
========================================================
刚搞uboot 学习下 写下来这些自己的小经验
我的终端用的是SecureCRT.exe
烧写uboot后 提示 Hit any key to stop autoboot : 几秒后 aoto运行
如果没有设置好 按键是没有用的 解决方法是:
选择 你打开的串口的会话设置 再选择 键映射 当然还有其他的方法 这里你映射几个键 既可以了
来自:http://blog.sina.com.cn/s/blog_6b94d5680100ms8g.html
SecureCRT 更改键盘映射功能 : http://blog.chinaunix.net/uid-20773865-id-4040702.html
背景:在Raspberry Pi上装了一个FreeBSD,之前是linux,用ssh连接时出现问题,这个ssh其实linux上也是一样的,于是按linux上的办法解决了该问题,重启动sshd后,用我的手机重新ssh到Raspberry pi上,提示error消失,连接正常。
root@rpi2:/usr/local # Feb 18 03:50:39 rpi2 sshd[4917]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key
魅族手机ssh访问:
Feb 18 03:50:41 rpi2 sshd[4917]: error: PAM: authentication error for root from meizu-mx4-pro.lan
Could not load host key: /etc/ssh/ssh_host_dsa_key,那就生成这个key:
root@rpi2:/usr/local # ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
SHA256:0gV9unsS+HmqgE0j45aqtNQVhVsYNUiX2pgBbbmBLbM root@rpi2
The key's randomart image is:
+---[DSA 1024]----+
| .*oB=o. |
| + @oo... . |
| =.@ .o |
| E *.o .. |
| o.+ S. . |
| ...B o. o |
| o .= o . + |
|o .o . = o |
|.o. ...= |
+----[SHA256]-----+
重新启动ssh服务:
root@rpi2:/usr/local # /etc/rc.d/sshd restart
Performing sanity check on sshd configuration.
Could not load host key: /etc/ssh/ssh_host_dsa_key
Stopping sshd.
Waiting for PIDS: 799.
Performing sanity check on sshd configuration.
Could not load host key: /etc/ssh/ssh_host_dsa_key
Starting sshd.
参考自:http://blog.163.com/zhengjiu_520/blog/static/3559830620118851822482/
root@rpi2:/usr/local # Feb 18 03:50:39 rpi2 sshd[4917]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key
魅族手机ssh访问:
Feb 18 03:50:41 rpi2 sshd[4917]: error: PAM: authentication error for root from meizu-mx4-pro.lan
Could not load host key: /etc/ssh/ssh_host_dsa_key,那就生成这个key:
root@rpi2:/usr/local # ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
SHA256:0gV9unsS+HmqgE0j45aqtNQVhVsYNUiX2pgBbbmBLbM root@rpi2
The key's randomart image is:
+---[DSA 1024]----+
| .*oB=o. |
| + @oo... . |
| =.@ .o |
| E *.o .. |
| o.+ S. . |
| ...B o. o |
| o .= o . + |
|o .o . = o |
|.o. ...= |
+----[SHA256]-----+
重新启动ssh服务:
root@rpi2:/usr/local # /etc/rc.d/sshd restart
Performing sanity check on sshd configuration.
Could not load host key: /etc/ssh/ssh_host_dsa_key
Stopping sshd.
Waiting for PIDS: 799.
Performing sanity check on sshd configuration.
Could not load host key: /etc/ssh/ssh_host_dsa_key
Starting sshd.
参考自:http://blog.163.com/zhengjiu_520/blog/static/3559830620118851822482/
配置FreeBSD下的Wifi主要参考这两篇文章即可,树莓派下的也大体一样一样的没有什么大的区别:
http://www.111cn.net/sys/freebsd/59534.htm
国外有一个文章在后面有写。
总之,按这样来配置连接上了家里的路由器。
Raspberry Pi Model B+ Run FreeBSD11+Apache+PHP+MySQL+Webmin+Wordpress:
http://www.bigsea.com.cn/archives/1393/
ifconfig -a时没有wlan0,是因为没有配置及没有启动服务:service netif start
root@rpi2:~ # ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 3c:46:d8:8e:7d:dc
inet6 fe80::3e46:d8ff:fe8e:7ddc%wlan0 prefixlen 64 tentative scopeid 0x3
groups: wlan
ssid HiWiFi_256ECA channel 4 (2427 MHz 11g) bssid d4:ee:07:25:6e:ca
country US authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 2:128-bit txpower 0 bmiss 7 scanvalid 60 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme roaming MANUAL
media: IEEE 802.11 Wireless Ethernet DS/1Mbps mode 11g
status: associated
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
其中“status: associated”表示无线网络已经连接,可以上网冲浪了。
固定你的 resolv.conf
如果你用DHCP,有一个问题可能会不断地搔扰你,就是/etc/resolv.conf里所记录的 DNS 会时不时地被修改。当然除了暴力地
代码如下 复制代码
#chflags schg /etc/resolv.conf
让它不能被修改外,还可以很简单地解决此问题,就是往/etc/dhclient.conf里添加
代码如下 复制代码
prepend domain-name-servers 8.8.8.8, 8.8.4.4;
# See ``man 5 dhclient.conf'' for details.
修改成自己的:
prepend domain-name-servers 114.114.114.114, 123.125.81.6;
# See ``man 5 dhclient.conf'' for details.
详细配置WIFI可查看FreeBSD官方文档。
=========================================================================
USB硬件信息:
root@rpi2:~ # dmesg | grep urtwn0
urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
urtwn0: at uhub1, port 3, addr 4 (disconnected)
urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
root@rpi2:~ # cat /var/log/messages | grep urtwn0
Feb 17 11:19:16 rpi2 kernel: urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
Feb 17 11:19:16 rpi2 kernel: urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
Feb 17 11:39:37 rpi2 kernel: urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
Feb 17 11:39:37 rpi2 kernel: urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
Feb 17 14:15:35 rpi2 kernel: urtwn0: at uhub1, port 3, addr 4 (disconnected)
Feb 17 14:20:14 rpi2 kernel: urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
Feb 17 14:20:14 rpi2 kernel: urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
启动时信息提示:
root@rpi2:~ # ifconfig wlan create wlandev urtwn0
ieee80211_load_module: load the wlan_amrr module by hand for now.
wlan0: Ethernet address: 3c:46:d8:8e:7d:dc
wlan0
拔下无线Wifi的USB时提示:
root@rpi2:~ # ugen0.4: <Realtek> at usbus0 (disconnected)
urtwn0: at uhub1, port 3, addr 4 (disconnected)
查看网络:
root@rpi2:~ # ifconfig wlan0 up scan
wlan0: ieee80211_new_state_locked: pending INIT -> SCAN transition lost
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
123456 b8:55:10:1a:9d:05 6 54M -77:-95 100 EP RSN HTCAP WME
ChinaNet-iYDT fc:e3:3c:54:b8:ec 11 54M -93:-95 98 EP HTCAP WPS WPA WME
CALT 40:16:9f:55:33:2c 7 54M -90:-95 100 EPS RSN WPA WME HTCAP ATH WPS
ChinaNet-Kjvz 60:b6:17:79:14:b7 2 54M -89:-95 100 EP HTCAP WPA WME
CU_VGSU 88:cf:98:dd:fa:18 3 54M -91:-95 100 EP HTCAP RSN WME
HiWiFi_256ECA d4:ee:07:25:6e:ca 4 54M -69:-95 100 EP HTCAP WPA RSN WME
jiaweiyi 8c:be:be:2f:ae:5b 8 54M -93:-95 100 EP RSN HTCAP WPS WPA WME
ChinaNet-qePR 60:b6:17:78:89:3e 10 54M -79:-95 100 EP HTCAP WPA WME
service netif start # 这个能自动帮你连接无线获取IP地址,当然如果配置正确的话,开机就可以自动连接上无线了。
实践来源:http://jackxiang.com/post/7492/
—————————————————————————————————————————————————————————————
Setting up USB WiFi under FreeBSD is not a very hard task.
We can use official handbook.
But in my opinion it’s too complex.
Here is a simple guide how to configure USB WiFi.
Our goal is to configure WiFi interface to connect and use available wireless network.
I use Miniature WiFi Module from Adafruit.
This is in reality Realtek RTL8188CUS.
elinux.org says this is a problem adapter.
And I had some problems with it under Raspbian.
There was no driver for this adapter in FreeBSD-10.0-RELEASE.
Driver for this adapter appears in stable images in March.
This is good for us, so we don’t need to adding it into kernel.
During boot we can see our adapter:
After boot we can see it in interfaces list:
If we try to up this interface we will see some warning and error messages:
urtwn-rtl8192cfwT: You need to read the LICENSE file in /usr/share/doc/legal/realtek/.
urtwn-rtl8192cfwT: If you agree with the license, set legal.realtek.license_ack=1 in /boot/loader.conf.
module_register_init: MOD_LOAD (urtwn-rtl8192cfwT_fw, 0xc2aa24f0, 0) error 1
urtwn-rtl8192cfwT: could not load firmware image, error 8
urtwn0: failed loadfirmware of file urtwn-rtl8192cfwT
We need to add this two strings to file /boot/loader.conf:
legal.realtek.license_ack=1
if_urtwn_load="YES"
After reboot we can continue.
Next step is creating wlan interface:
ifconfig wlan0 create wlandev urtwn0
Then we can to up this wlan interface and scan available wireless networks:
ifconfig wlan0 up scan
For permanent use WiFi connection we need to add this two strings to file /etc/rc.conf:
wlans_urtwn0="wlan0"
ifconfig_wlan0="WPA DHCP"
And we need to configure authentication in file /etc/wpa_supplicant.conf
After reboot we can check network connection:
It works!
http://www.111cn.net/sys/freebsd/59534.htm
国外有一个文章在后面有写。
总之,按这样来配置连接上了家里的路由器。
Raspberry Pi Model B+ Run FreeBSD11+Apache+PHP+MySQL+Webmin+Wordpress:
http://www.bigsea.com.cn/archives/1393/
ifconfig -a时没有wlan0,是因为没有配置及没有启动服务:service netif start
root@rpi2:~ # ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 3c:46:d8:8e:7d:dc
inet6 fe80::3e46:d8ff:fe8e:7ddc%wlan0 prefixlen 64 tentative scopeid 0x3
groups: wlan
ssid HiWiFi_256ECA channel 4 (2427 MHz 11g) bssid d4:ee:07:25:6e:ca
country US authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 2:128-bit txpower 0 bmiss 7 scanvalid 60 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme roaming MANUAL
media: IEEE 802.11 Wireless Ethernet DS/1Mbps mode 11g
status: associated
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
其中“status: associated”表示无线网络已经连接,可以上网冲浪了。
固定你的 resolv.conf
如果你用DHCP,有一个问题可能会不断地搔扰你,就是/etc/resolv.conf里所记录的 DNS 会时不时地被修改。当然除了暴力地
代码如下 复制代码
#chflags schg /etc/resolv.conf
让它不能被修改外,还可以很简单地解决此问题,就是往/etc/dhclient.conf里添加
代码如下 复制代码
prepend domain-name-servers 8.8.8.8, 8.8.4.4;
# See ``man 5 dhclient.conf'' for details.
修改成自己的:
prepend domain-name-servers 114.114.114.114, 123.125.81.6;
# See ``man 5 dhclient.conf'' for details.
详细配置WIFI可查看FreeBSD官方文档。
=========================================================================
USB硬件信息:
root@rpi2:~ # dmesg | grep urtwn0
urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
urtwn0: at uhub1, port 3, addr 4 (disconnected)
urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
root@rpi2:~ # cat /var/log/messages | grep urtwn0
Feb 17 11:19:16 rpi2 kernel: urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
Feb 17 11:19:16 rpi2 kernel: urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
Feb 17 11:39:37 rpi2 kernel: urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
Feb 17 11:39:37 rpi2 kernel: urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
Feb 17 14:15:35 rpi2 kernel: urtwn0: at uhub1, port 3, addr 4 (disconnected)
Feb 17 14:20:14 rpi2 kernel: urtwn0: <Realtek 802.11n NIC, class 0/0, rev 2.00/0.00, addr 4> on usbus0
Feb 17 14:20:14 rpi2 kernel: urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R
启动时信息提示:
root@rpi2:~ # ifconfig wlan create wlandev urtwn0
ieee80211_load_module: load the wlan_amrr module by hand for now.
wlan0: Ethernet address: 3c:46:d8:8e:7d:dc
wlan0
拔下无线Wifi的USB时提示:
root@rpi2:~ # ugen0.4: <Realtek> at usbus0 (disconnected)
urtwn0: at uhub1, port 3, addr 4 (disconnected)
查看网络:
root@rpi2:~ # ifconfig wlan0 up scan
wlan0: ieee80211_new_state_locked: pending INIT -> SCAN transition lost
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
123456 b8:55:10:1a:9d:05 6 54M -77:-95 100 EP RSN HTCAP WME
ChinaNet-iYDT fc:e3:3c:54:b8:ec 11 54M -93:-95 98 EP HTCAP WPS WPA WME
CALT 40:16:9f:55:33:2c 7 54M -90:-95 100 EPS RSN WPA WME HTCAP ATH WPS
ChinaNet-Kjvz 60:b6:17:79:14:b7 2 54M -89:-95 100 EP HTCAP WPA WME
CU_VGSU 88:cf:98:dd:fa:18 3 54M -91:-95 100 EP HTCAP RSN WME
HiWiFi_256ECA d4:ee:07:25:6e:ca 4 54M -69:-95 100 EP HTCAP WPA RSN WME
jiaweiyi 8c:be:be:2f:ae:5b 8 54M -93:-95 100 EP RSN HTCAP WPS WPA WME
ChinaNet-qePR 60:b6:17:78:89:3e 10 54M -79:-95 100 EP HTCAP WPA WME
service netif start # 这个能自动帮你连接无线获取IP地址,当然如果配置正确的话,开机就可以自动连接上无线了。
实践来源:http://jackxiang.com/post/7492/
—————————————————————————————————————————————————————————————
Setting up USB WiFi under FreeBSD is not a very hard task.
We can use official handbook.
But in my opinion it’s too complex.
Here is a simple guide how to configure USB WiFi.
Our goal is to configure WiFi interface to connect and use available wireless network.
I use Miniature WiFi Module from Adafruit.
This is in reality Realtek RTL8188CUS.
elinux.org says this is a problem adapter.
And I had some problems with it under Raspbian.
There was no driver for this adapter in FreeBSD-10.0-RELEASE.
Driver for this adapter appears in stable images in March.
This is good for us, so we don’t need to adding it into kernel.
During boot we can see our adapter:
After boot we can see it in interfaces list:
If we try to up this interface we will see some warning and error messages:
urtwn-rtl8192cfwT: You need to read the LICENSE file in /usr/share/doc/legal/realtek/.
urtwn-rtl8192cfwT: If you agree with the license, set legal.realtek.license_ack=1 in /boot/loader.conf.
module_register_init: MOD_LOAD (urtwn-rtl8192cfwT_fw, 0xc2aa24f0, 0) error 1
urtwn-rtl8192cfwT: could not load firmware image, error 8
urtwn0: failed loadfirmware of file urtwn-rtl8192cfwT
We need to add this two strings to file /boot/loader.conf:
legal.realtek.license_ack=1
if_urtwn_load="YES"
After reboot we can continue.
Next step is creating wlan interface:
ifconfig wlan0 create wlandev urtwn0
Then we can to up this wlan interface and scan available wireless networks:
ifconfig wlan0 up scan
For permanent use WiFi connection we need to add this two strings to file /etc/rc.conf:
wlans_urtwn0="wlan0"
ifconfig_wlan0="WPA DHCP"
And we need to configure authentication in file /etc/wpa_supplicant.conf
After reboot we can check network connection:
It works!
option+command+I,后调出:Command+Shift+P:Capture full size screenshot
http://www.renniaofei.com/fenxiang/chrome-capture-screen.html
https://jingyan.baidu.com/article/1974b289342468f4b1f77428.html
Capture full size screenshot:实践证明是截取长图,整个网页。
5款好用的Chrome截图扩展推荐用GoFullPage,可以整个页面截图,比上面这个操作更方便,不需要登录,还能直接将图转成PDF
再就是一个DIV里面的滚动条是无法截取到滚动条下面的,即使用了截取整个页面。尤其是没有地址栏的页面怎么办?用option+command+I,找到DIV的部分后存到Dreamwaver里面后再用GoFullPage就能存为PDF的整张图片了,成功实现截图。
Nimbus Capture,GoFullPage,Fireshot,Awesome Screenshot,Eagle。
背景:近来国家防火墙对chrome的封锁,直接在chrome的扩展里下截图插件不行了,想找个这样的都不行,特别是整个网页截图,要是一般的QQ截图都成,Chrome扩展好像要重启一下chrome浏览器才能用,伴随这个chrome升级有些截图插件也用不了,最后用了遨游浏览器自带的网页面存为图片解决了该问题:-)。
捕捉网页截图 - FireShot,它还能保存为PDF,相当好使哟~
在Chrome中安装了网页截图插件以后,当用户打开任何一个网页的时候都可以通过Chrome右上角的网页截图插件按钮来启动截图功能,当点击按钮以后该插件会提示用户选择部分截图还是网页截图,进而完成自己的网页截图操作。总得来说截图功能可以分下面几个步骤完成:
1.点击截图插件按钮来选择是部分截图还是全屏截图。
2.选取需要截图的范围(全屏截图不需要)。
3.对截取成功的图片进行编辑操作,其中支持文字、箭头、注释等操作、
4.保存相应的图片到本地计算机中(也可以把截取的图片通过截图插件进行分享)。
网页截图(Webpage Screenshot)不仅提供了简单的网页截图功能,用户同样可以在截图的过程中就对图片进一步处理,比如编辑文字、画上箭头标识、写上图片的备注信息等。
Chrome截图插件
在使用截图插件进行全屏截图的时候,用户只需要选择全屏截图即可快速地把当前网页的所有画面都保存成图片(包括不可见部分),在截图完成以后,用户同样可以使用其中的文字和图画对截图进一步地修改。
截图插件
使用Webpage Screenshot截图以后,用户可以使用波浪形、文字、马赛克、矩形、圆形、箭头、再此截图对该图片进行编辑,在截图完成以后用户可以快速地通过社交网站进行分享和保存。
Chrome截图打印
通过网页截图插件不仅可以对当前截图下来的图片进行保存和分享操作,用户还可以对当前截图的页面直接调用快速打印的功能,用户可以现在直接打印部分网页的截图信息和用户对图片的相关注释。
如果您对Chrome浏览器的截图功能非常感兴趣,这里可以为您推荐另一款好用的Chrome截图插件:Chrome快速打印和截图插件:Save the trees (print & screenshot)。
点击转到网页截图 - Webpage Screenshot下载页面:
http://chromecj.com/blogging/2014-08/30/download.html
来自:http://chromecj.com/blogging/2014-08/30.html
http://www.renniaofei.com/fenxiang/chrome-capture-screen.html
https://jingyan.baidu.com/article/1974b289342468f4b1f77428.html
Capture full size screenshot:实践证明是截取长图,整个网页。
5款好用的Chrome截图扩展推荐用GoFullPage,可以整个页面截图,比上面这个操作更方便,不需要登录,还能直接将图转成PDF
再就是一个DIV里面的滚动条是无法截取到滚动条下面的,即使用了截取整个页面。尤其是没有地址栏的页面怎么办?用option+command+I,找到DIV的部分后存到Dreamwaver里面后再用GoFullPage就能存为PDF的整张图片了,成功实现截图。
Nimbus Capture,GoFullPage,Fireshot,Awesome Screenshot,Eagle。
背景:近来国家防火墙对chrome的封锁,直接在chrome的扩展里下截图插件不行了,想找个这样的都不行,特别是整个网页截图,要是一般的QQ截图都成,Chrome扩展好像要重启一下chrome浏览器才能用,伴随这个chrome升级有些截图插件也用不了,最后用了遨游浏览器自带的网页面存为图片解决了该问题:-)。
捕捉网页截图 - FireShot,它还能保存为PDF,相当好使哟~
在Chrome中安装了网页截图插件以后,当用户打开任何一个网页的时候都可以通过Chrome右上角的网页截图插件按钮来启动截图功能,当点击按钮以后该插件会提示用户选择部分截图还是网页截图,进而完成自己的网页截图操作。总得来说截图功能可以分下面几个步骤完成:
1.点击截图插件按钮来选择是部分截图还是全屏截图。
2.选取需要截图的范围(全屏截图不需要)。
3.对截取成功的图片进行编辑操作,其中支持文字、箭头、注释等操作、
4.保存相应的图片到本地计算机中(也可以把截取的图片通过截图插件进行分享)。
网页截图(Webpage Screenshot)不仅提供了简单的网页截图功能,用户同样可以在截图的过程中就对图片进一步处理,比如编辑文字、画上箭头标识、写上图片的备注信息等。
Chrome截图插件
在使用截图插件进行全屏截图的时候,用户只需要选择全屏截图即可快速地把当前网页的所有画面都保存成图片(包括不可见部分),在截图完成以后,用户同样可以使用其中的文字和图画对截图进一步地修改。
截图插件
使用Webpage Screenshot截图以后,用户可以使用波浪形、文字、马赛克、矩形、圆形、箭头、再此截图对该图片进行编辑,在截图完成以后用户可以快速地通过社交网站进行分享和保存。
Chrome截图打印
通过网页截图插件不仅可以对当前截图下来的图片进行保存和分享操作,用户还可以对当前截图的页面直接调用快速打印的功能,用户可以现在直接打印部分网页的截图信息和用户对图片的相关注释。
如果您对Chrome浏览器的截图功能非常感兴趣,这里可以为您推荐另一款好用的Chrome截图插件:Chrome快速打印和截图插件:Save the trees (print & screenshot)。
点击转到网页截图 - Webpage Screenshot下载页面:
http://chromecj.com/blogging/2014-08/30/download.html
来自:http://chromecj.com/blogging/2014-08/30.html
背景:FiddlerHook这个小工具的插件在Firefox下配置后很方便,近来升级Firefox居然给禁用了,提示扩展未被验证而被禁用,要配置这个fiddler还得去Firefox的工具->选项->网络->连接->配置 Firefox 如何连接至国际互联网里的手工配置代码->127.0.0.1 8888,是不是太麻烦了,有这个fiddler2提供的Firefox插件多方便:use fidder automatic。
在 扩展 页面 点击右上角的 齿轮 状 的按钮,选择 “检查更新”,将扩展更新到最新版,
如果扩展已是最新版,请向该发布该扩展的公司反馈,请该公司尽快将扩展上传至 火狐的扩展中心,进行签名。
已经和以上公司反馈过,但一直没有提交扩展签名
目前绕过签名校验的方法:about:config 中 xpinstall.signatures.required 设置为false。
在 扩展 页面 点击右上角的 齿轮 状 的按钮,选择 “检查更新”,将扩展更新到最新版,
如果扩展已是最新版,请向该发布该扩展的公司反馈,请该公司尽快将扩展上传至 火狐的扩展中心,进行签名。
已经和以上公司反馈过,但一直没有提交扩展签名
目前绕过签名校验的方法:about:config 中 xpinstall.signatures.required 设置为false。
背景:今天在swoole群里贴了一个nodejs和swoole的形象区别,于是出现了两派互相不服的文字争论,nodejs高大上的部署方式-PM2和swoole自带的一个辩论。
下面3点摘自:http://blog.csdn.net/leftfist/article/details/41891407
1)CPU密集型任务存在短板
如上所述,nodejs的机制是单线程,这个线程里面,有一个事件循环机制,处理所有的请求。如图所示。在事件处理过程中,它会智能地将一些涉及到IO、网络通信等耗时比较长的操作,交由worker threads去执行,执行完了再回调,这就是所谓的异步IO非阻塞吧。但是,那些非IO操作,只用CPU计算的操作,它就自己扛了,比如算什么斐波那契数列之类。它是单线程,这些自己扛的任务要一个接着一个地完成,前面那个没完成,后面的只能干等。因此,对CPU要求比较高的CPU密集型任务多的话,就有可能会造成号称高性能,适合高并发的node.js服务器反应缓慢。结论是:NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。
2)无法利用CPU的多核
最开始,线程只是用于分配单个处理器处理时间的一种机制。但假如操作系统本身支持多个CPU/内核,那么每个线程都可以得到一个不同自己的CPU/内核,实现真正的“并行运算”。在这种情况下,多线程程序可以提高资源使用效率。Node.js是单线程程序,它只有一个event loop,也只占用一个CPU/内核。现在大部分服务器都是多CPU或多核的,当Node.js程序的event loop被CPU密集型的任务占用,导致有其它任务被阻塞时,却还有CPU/内核处于闲置的状态,造成资源的浪费。
解决方案
利用原生模块或第三方模块,开辟进程或子进程,用于处理这些特殊的任务。
3)如果有异常抛出,因为是单线程,整个项目将不可用。但这归根到底是代码的问题,糟糕的代码,不管什么体系,都会有问题,即使不崩溃。解决办法是用pm2等工具来运行?
说到密集型计算:其实PHP也好不到哪儿去,这块还得c和c++,解释性的语言对于密集型计算都好不到哪去,这块即使是nginx也可能出现事件队列出现阻塞的情况,(见:http://jackxiang.com/post/8433/):
nodejs的机制是单线程,这个线程里面,有一个事件循环机制,处理所有的请求。如图所示。在事件处理过程中,它会智能地将一些涉及到IO、网络通信等耗时比较长的操作,交由worker threads去执行,执行完了再回调,这就是所谓的异步IO非阻塞吧。但是,那些非IO操作,只用CPU计算的操作,它就自己扛了,比如算什么斐波那契数列之类。它是单线程,这些自己扛的任务要一个接着一个地完成,前面那个没完成,后面的只能干等。因此,对CPU要求比较高的CPU密集型任务多的话,就有可能会造成号称高性能,适合高并发的node.js服务器反应缓慢。
=======================================================================================
附录,对话记录,QQ及Email均*替代,保留昵称:
回忆未来-向东-Jàck(********7693) 15:48:05
作为顾问,必须把这个swoole形象化,
swoole解决了nodejs的这样一个问题:
无聊咔咔(*******) 15:51:47
用swoole就不用部署啊阅读全文
下面3点摘自:http://blog.csdn.net/leftfist/article/details/41891407
1)CPU密集型任务存在短板
如上所述,nodejs的机制是单线程,这个线程里面,有一个事件循环机制,处理所有的请求。如图所示。在事件处理过程中,它会智能地将一些涉及到IO、网络通信等耗时比较长的操作,交由worker threads去执行,执行完了再回调,这就是所谓的异步IO非阻塞吧。但是,那些非IO操作,只用CPU计算的操作,它就自己扛了,比如算什么斐波那契数列之类。它是单线程,这些自己扛的任务要一个接着一个地完成,前面那个没完成,后面的只能干等。因此,对CPU要求比较高的CPU密集型任务多的话,就有可能会造成号称高性能,适合高并发的node.js服务器反应缓慢。结论是:NodeJS适合运用在高并发、I/O密集、少量业务逻辑的场景。
2)无法利用CPU的多核
最开始,线程只是用于分配单个处理器处理时间的一种机制。但假如操作系统本身支持多个CPU/内核,那么每个线程都可以得到一个不同自己的CPU/内核,实现真正的“并行运算”。在这种情况下,多线程程序可以提高资源使用效率。Node.js是单线程程序,它只有一个event loop,也只占用一个CPU/内核。现在大部分服务器都是多CPU或多核的,当Node.js程序的event loop被CPU密集型的任务占用,导致有其它任务被阻塞时,却还有CPU/内核处于闲置的状态,造成资源的浪费。
解决方案
利用原生模块或第三方模块,开辟进程或子进程,用于处理这些特殊的任务。
3)如果有异常抛出,因为是单线程,整个项目将不可用。但这归根到底是代码的问题,糟糕的代码,不管什么体系,都会有问题,即使不崩溃。解决办法是用pm2等工具来运行?
说到密集型计算:其实PHP也好不到哪儿去,这块还得c和c++,解释性的语言对于密集型计算都好不到哪去,这块即使是nginx也可能出现事件队列出现阻塞的情况,(见:http://jackxiang.com/post/8433/):
nodejs的机制是单线程,这个线程里面,有一个事件循环机制,处理所有的请求。如图所示。在事件处理过程中,它会智能地将一些涉及到IO、网络通信等耗时比较长的操作,交由worker threads去执行,执行完了再回调,这就是所谓的异步IO非阻塞吧。但是,那些非IO操作,只用CPU计算的操作,它就自己扛了,比如算什么斐波那契数列之类。它是单线程,这些自己扛的任务要一个接着一个地完成,前面那个没完成,后面的只能干等。因此,对CPU要求比较高的CPU密集型任务多的话,就有可能会造成号称高性能,适合高并发的node.js服务器反应缓慢。
=======================================================================================
附录,对话记录,QQ及Email均*替代,保留昵称:
回忆未来-向东-Jàck(********7693) 15:48:05
作为顾问,必须把这个swoole形象化,
swoole解决了nodejs的这样一个问题:
无聊咔咔(*******) 15:51:47
用swoole就不用部署啊阅读全文
[实践OK]解决linux下/etc/rc.local开机器不执行的原因。linux下rc.local中的服务开启失败分析~
Unix/LinuxC技术 jackxiang 2016-2-17 10:59
背景:像webserver啥的开机启动其他程序的shell脚本,链接:https://jackxiang.com/post/7433/ 里写到: /etc/rc.d/rc.local ,而后做了软连接,/etc/rc.local -> rc.d/rc.local,而这样久后,就以为写在/etc/rc.local就成了,导致开机还真没启动,得注意这个问题。
方法一:
直接建立新文件之后,建立软链接,source文件一定得放在/etc/rc.d里面。
1)vi /etc/rc.d/rc.local
2)ln 软链接,ln [options] source dist, cd /etc ;ln -s rc.d/rc.local /etc/rc.local ==>形成: /etc/rc.local -> rc.d/rc.local
方法二:
更标准一些,根据开机启动级别是3进行配置(/etc/rc.d/rc3.d 里面去指向/etc/rc.local也行,总之得有一个在/etc/rc.local里自启动才行)
操作如下:
引用:
到后来,有几台服务器突然被重启了,这时候领导问,怎么开机启动的脚本没起作用,还被批了一顿,哎,做事虎头蛇尾,活该!
然后去查,一直没查到原因,
手动执行都是正确的,在排除了权限原因和脚本问题后,很郁闷,怎么放到开机启动项目中就无法执行了呢。
于是去查linux开机启动过程信息。google下,看了下关于一些开机启动启的资料,发现了开机启动程序的级别为3.
果断顺藤莫瓜,找到了这个目录 /etc/rc.d/rc3.d,进去一看恍然大悟。
我的rc.local文件是在 /etc/rc.local中(网上都是说写在这里,我是按照网上来弄的),
而我查看了系统指向rc.local文件的路径是 /etc/rc.d/rc.local,
后来把开机启动的脚本配置到/etc/rc.d/rc.local中(或者把S99local指向 /etc/rc.local也行),重启检查,成功!
总结:主要还是对linux系统不熟悉,这是个漫长的过程,有时间得多看看这方面的书籍。
法二来自:http://www.cnblogs.com/montya/archive/2011/09/09/2172001.html
linux下rc.local中的服务开启失败分析:
linux下可以在rc.local中设置开机启动任务。开机时,系统会根据 /etc/inittab中设置的运行级别,开启/etc/rc.d下相应的服务。如多用户启模式为3,则系统会开启/etc/rc.d/rc3.d/下的服务。
/etc/rc.d/rc3.d/的目录列表:
20140323164552
其中K表示需关闭的服务,S表示开启服务,后面的数据表示关闭或开启的顺序。/etc/rc.d/rc3.d/下的服务一般通过软连接,指向到/etc/init.d中。
S99local一般会通过软链接指到/etc/rc.d/rc.local
ls -al /etc/rc.d/rc3.d/S99local
lrwxrwxrwx. 1 root root 11 Dec 17 2012 /etc/rc.d/rc3.d/S99local ->../rc.local
ls -al /etc/rc.local
lrwxrwxrwx. 1 root root 13 Dec 17 2012 /etc/rc.local -> rc.d/rc.local
ls -al /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 149 Mar 21 13:17 /etc/rc.d/rc.local
如果在rc.local中添加了服务,但开机时未能所开启。则可以通过方排查:
1. 根据运行级别查看rc.local文件链接指是否正确。
2. rc.local文件有没执行限制,导致执行失败,给 chmod +x 给 rc.local添加执行权限。
3. 查看/var/log/boot.log有没报错信息,是不是执行出错了, rc.local中的服务要写 sheel命令的绝对路径, 如Erlang服务,不能直接写 erl,需添加绝对路径/usr/local/bin/erl。
4. 因为rc.local是等待 /etc/init.d的服务都开启后才执行的,所以如果/etc/init.d中的服务未开启完成,rc.local是不会执行的。如启动了firstboot服务,将会导致多用户模式下rc.local不能执行, 可通过 chkconfig –del 把 firstboot服务去除。服务开启时都会写启动日志,可通过/var/log/boot.log查看服务启动与否,再结合/etc/rc.d/rcx.d/下服务启动顺序排查哪些服务阻塞了。可结合 ps awux | grep ServerName 一起排查。
From:http://www.kongqingquan.com/archives/152
方法一:
直接建立新文件之后,建立软链接,source文件一定得放在/etc/rc.d里面。
1)vi /etc/rc.d/rc.local
2)ln 软链接,ln [options] source dist, cd /etc ;ln -s rc.d/rc.local /etc/rc.local ==>形成: /etc/rc.local -> rc.d/rc.local
方法二:
更标准一些,根据开机启动级别是3进行配置(/etc/rc.d/rc3.d 里面去指向/etc/rc.local也行,总之得有一个在/etc/rc.local里自启动才行)
操作如下:
引用:
到后来,有几台服务器突然被重启了,这时候领导问,怎么开机启动的脚本没起作用,还被批了一顿,哎,做事虎头蛇尾,活该!
然后去查,一直没查到原因,
手动执行都是正确的,在排除了权限原因和脚本问题后,很郁闷,怎么放到开机启动项目中就无法执行了呢。
于是去查linux开机启动过程信息。google下,看了下关于一些开机启动启的资料,发现了开机启动程序的级别为3.
果断顺藤莫瓜,找到了这个目录 /etc/rc.d/rc3.d,进去一看恍然大悟。
我的rc.local文件是在 /etc/rc.local中(网上都是说写在这里,我是按照网上来弄的),
而我查看了系统指向rc.local文件的路径是 /etc/rc.d/rc.local,
后来把开机启动的脚本配置到/etc/rc.d/rc.local中(或者把S99local指向 /etc/rc.local也行),重启检查,成功!
总结:主要还是对linux系统不熟悉,这是个漫长的过程,有时间得多看看这方面的书籍。
法二来自:http://www.cnblogs.com/montya/archive/2011/09/09/2172001.html
linux下rc.local中的服务开启失败分析:
linux下可以在rc.local中设置开机启动任务。开机时,系统会根据 /etc/inittab中设置的运行级别,开启/etc/rc.d下相应的服务。如多用户启模式为3,则系统会开启/etc/rc.d/rc3.d/下的服务。
/etc/rc.d/rc3.d/的目录列表:
20140323164552
其中K表示需关闭的服务,S表示开启服务,后面的数据表示关闭或开启的顺序。/etc/rc.d/rc3.d/下的服务一般通过软连接,指向到/etc/init.d中。
S99local一般会通过软链接指到/etc/rc.d/rc.local
ls -al /etc/rc.d/rc3.d/S99local
lrwxrwxrwx. 1 root root 11 Dec 17 2012 /etc/rc.d/rc3.d/S99local ->../rc.local
ls -al /etc/rc.local
lrwxrwxrwx. 1 root root 13 Dec 17 2012 /etc/rc.local -> rc.d/rc.local
ls -al /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 149 Mar 21 13:17 /etc/rc.d/rc.local
如果在rc.local中添加了服务,但开机时未能所开启。则可以通过方排查:
1. 根据运行级别查看rc.local文件链接指是否正确。
2. rc.local文件有没执行限制,导致执行失败,给 chmod +x 给 rc.local添加执行权限。
3. 查看/var/log/boot.log有没报错信息,是不是执行出错了, rc.local中的服务要写 sheel命令的绝对路径, 如Erlang服务,不能直接写 erl,需添加绝对路径/usr/local/bin/erl。
4. 因为rc.local是等待 /etc/init.d的服务都开启后才执行的,所以如果/etc/init.d中的服务未开启完成,rc.local是不会执行的。如启动了firstboot服务,将会导致多用户模式下rc.local不能执行, 可通过 chkconfig –del 把 firstboot服务去除。服务开启时都会写启动日志,可通过/var/log/boot.log查看服务启动与否,再结合/etc/rc.d/rcx.d/下服务启动顺序排查哪些服务阻塞了。可结合 ps awux | grep ServerName 一起排查。
From:http://www.kongqingquan.com/archives/152
[遇到问题]解决 recv() failed (104: Connection reset by peer) while reading response header from upstream
Php/Js/Shell/Go jackxiang 2016-2-16 16:31
问题如下:
2016/02/16 16:29:05 [error] 11925#0: *50 recv() failed (104: Connection reset by peer) while reading response header from upstream
解决办法:
Nginx出现502 Bad Gateway 错误,
查了Nginx的错误日志为:
2014/08/02 16:14:31 [error] 17029#0: *17941 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 210.61.12.2, server: blog.lixiphp.com, request: “POST /api/1.0 HTTP/1.1″, upstream: “fastcgi://127.0.0.1:9000″, host: “blog.lixiphp.com”2014/08/02 16:24:52 [error] 29615#0: *3 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 58.220.197.35, server: blog.lixiphp.com, request: “GET /404 HTTP/1.1″, upstream: “fastcgi://127.0.0.1:9000″, host: “blog.lixiphp.com”
不要使用php-fpm的request_terminate_timeout,最好设成request_terminate_timeout=0;
vi /etc/php-fpm.d/www.conf
修改为:
; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the ‘max_execution_time’ ini option
; does not stop script execution for some reason. A value of ’0′ means ‘off’.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_terminate_timeout = 0
因为这个参数会直接杀掉php进程,然后重启php进程,这样前端nginx就会返回104: Connection reset by peer。这个过程是很慢,总体感觉就是网站很卡。
重启 php-fpm 和 Nginx 一切正常。
service nginx restart
killall php-fpm
php-fpm
再打开就OK了。
来自:http://www.th7.cn/Program/php/201408/254237.shtml
2016/02/16 16:29:05 [error] 11925#0: *50 recv() failed (104: Connection reset by peer) while reading response header from upstream
解决办法:
Nginx出现502 Bad Gateway 错误,
查了Nginx的错误日志为:
2014/08/02 16:14:31 [error] 17029#0: *17941 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 210.61.12.2, server: blog.lixiphp.com, request: “POST /api/1.0 HTTP/1.1″, upstream: “fastcgi://127.0.0.1:9000″, host: “blog.lixiphp.com”2014/08/02 16:24:52 [error] 29615#0: *3 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 58.220.197.35, server: blog.lixiphp.com, request: “GET /404 HTTP/1.1″, upstream: “fastcgi://127.0.0.1:9000″, host: “blog.lixiphp.com”
不要使用php-fpm的request_terminate_timeout,最好设成request_terminate_timeout=0;
vi /etc/php-fpm.d/www.conf
修改为:
; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the ‘max_execution_time’ ini option
; does not stop script execution for some reason. A value of ’0′ means ‘off’.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_terminate_timeout = 0
因为这个参数会直接杀掉php进程,然后重启php进程,这样前端nginx就会返回104: Connection reset by peer。这个过程是很慢,总体感觉就是网站很卡。
重启 php-fpm 和 Nginx 一切正常。
service nginx restart
killall php-fpm
php-fpm
再打开就OK了。
来自:http://www.th7.cn/Program/php/201408/254237.shtml
PHP安装与使用VLD查看opcode代码【PHP安装第三方扩展的方法】
Php/Js/Shell/Go jackxiang 2016-2-15 15:08
背景:自从PHP引入了一个叫OPcache的扩展,那么如何看OPcache呢,这儿有一个扩展分析PHP代码的性能叫VLD。
需要分析PHP代码的性能,或者说实现同样功能的代码到底哪个更好呢?或者说想知道底层的实现可以使用VLD查看opcode
下载与安装VLD
# wget http://pecl.php.net/get/vld-0.11.2.tgz
# tar zxvf vld-0.11.2.tgz
# cd ./vld-0.11.2
# /usr/local/php/bin/phpize 或者直接phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-vld
# make && make install
---------------------------------
编辑php.ini文件激活vld扩展:
php.ini位置
#cd /usr/local/php/lib
增加
extension=vld.so
重启Apache:
# /usr/local/apache2/bin/apachectl restart
---------------------------------
查看phpinfo()信息
--------------------------------
至此,VLD就安装完了。写个简单的test.php
[php] view plain copy
$a='123';
echo $a;
# php -dvld.active=1 ./test.php
如果没有设置php环境变量的话
#/usr/local/php/bin/php -dvld.active=1 test.php
查看结果
。。。。
下面是举例说明怎么看...
更多请转向:http://blog.csdn.net/21aspnet/article/details/7002644
需要分析PHP代码的性能,或者说实现同样功能的代码到底哪个更好呢?或者说想知道底层的实现可以使用VLD查看opcode
下载与安装VLD
# wget http://pecl.php.net/get/vld-0.11.2.tgz
# tar zxvf vld-0.11.2.tgz
# cd ./vld-0.11.2
# /usr/local/php/bin/phpize 或者直接phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-vld
# make && make install
---------------------------------
编辑php.ini文件激活vld扩展:
php.ini位置
#cd /usr/local/php/lib
增加
extension=vld.so
重启Apache:
# /usr/local/apache2/bin/apachectl restart
---------------------------------
查看phpinfo()信息
--------------------------------
至此,VLD就安装完了。写个简单的test.php
[php] view plain copy
$a='123';
echo $a;
# php -dvld.active=1 ./test.php
如果没有设置php环境变量的话
#/usr/local/php/bin/php -dvld.active=1 test.php
查看结果
。。。。
下面是举例说明怎么看...
更多请转向:http://blog.csdn.net/21aspnet/article/details/7002644
背景:一同学说是想把照片变成卡通效果,我也不会啊,查了下还真有类似效果,不过呢,想自己涂鸦还得有色彩感才行。
美图秀秀如何把照片变成动漫效果?按这个就成:
http://jingyan.baidu.com/article/380abd0a7478051d90192ca6.html
你看这个,这个是自己涂鸦的,你下个美图秀秀自己怎么图都成:
http://www.gezila.com/tutorials/3280.html
美图秀秀如何把照片变成动漫效果?按这个就成:
http://jingyan.baidu.com/article/380abd0a7478051d90192ca6.html
你看这个,这个是自己涂鸦的,你下个美图秀秀自己怎么图都成:
http://www.gezila.com/tutorials/3280.html
VimDiff小技巧之合并文件快捷键。
Unix/LinuxC技术 jackxiang 2016-2-13 17:21
背景:有时候需要比对一下文件,再就是如何快速的跳转到下一个不同,及从一个文件拷贝不同到另一个文件,这些在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/
光标移动
接下来试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。这是因为"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/
[疑难问题]PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): too many connections in
Php/Js/Shell/Go jackxiang 2016-2-13 01:48
背景:把mysql换成mysqli时出现,连接数过多,其实际上并不是,原因是我挪动了一下php的sock文件位置导致,因这几个socket修改没有修改完全,于是出现了too many connections ,从mysql里show processlist并没有发现真的有连接,其实用tshark抓下包估计能看到(http://jackxiang.com/post/7458/),并没有发出请求,而估计是mysqli的客户端自己报出来的,别看这个问题小,搞了老半天,都想重新安装Php了,发现原来是路径写错了同时mysqli的客户端提示连接数过多的误提示导致方向走错了。如下:
修改后记得重启动php-fpm:
[root@iZ25z0ugwgtZ etc]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
还会出现在localhost时连接找不到sock时提示诡异,如下:Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in
开始的回答有点不严谨,估计也没有解决问题,修改了答案,解决办法如下,或配置php.ini,参考:http://jackxiang.com/post/8499/
问题出现的原因:
当主机填写为localhost时MySQL会采用 unix domain socket连接,当主机填写为127.0.0.1时MySQL会采用TCP/IP的方式连接。使用Unix socket的连接比TCP/IP的连接更加快速与安全。这是MySQL连接的特性,可以参考官方文档的说明4.2.2. Connecting to the MySQL Server:
On Unix, MySQL programs treat the host name localhost specially, in a way that is
likely different from what you expect compared to other network-based programs.
For connections to localhost, MySQL programs attempt to connect to the local server
by using a Unix socket file. This occurs even if a --port or -P option is given to
specify a port number. To ensure that the client makes a TCP/IP connection to the
local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP
address or name of the local server. You can also specify the connection protocol
explicitly, even for localhost, by using the --protocol=TCP option.
这个问题有以下几种解决方法:
使用TCP/IP代替Unix socket。即在连接的时候将localhost换成127.0.0.1。
修改MySQL的配置文件my.cnf,指定mysql.socket的位置:
/var/lib/mysql/mysql.sock (你的mysql.socket路径)。
直接在php建立连接的时候指定my.socket的位置(官方文档:mysqli_connect)。比如:
$db = new MySQLi('localhost', 'root', 'root', 'my_db', '3306', '/var/run/mysqld/mysqld.sock')
如果哪里没有说清楚或者说错了,欢迎提出了~~
______________________排查要点如下_______________________________
warning: mysqli::real_connect(): (hy000/1040): too many connections in:
出现场景 :手动编译安装mysql,并制定安装位置,php以localhost方式连接mysql
原因分析 :手动编译安装制定位置后所有的mysql文件都在制定的目录或者data目录下面,php默认只会寻找/temp/mysql.sock找这个sock文件,所以会导致sock文件无法找到。
解决方法 :
1.给sock文件做个软链
ln -s /data/mysqldb/mysql.sock /tmp/mysql.sock;
或者
2.修改php的默认mysql.sock连接地址
mysql.default_socket=/data/mysqldb/mysql.sock
3.使用tcp socket的方式进行连接
mysql('127.0.0.1','username','passwod');
来自:http://ju.outofmemory.cn/entry/144221
修改后记得重启动php-fpm:
[root@iZ25z0ugwgtZ etc]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
还会出现在localhost时连接找不到sock时提示诡异,如下:Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in
开始的回答有点不严谨,估计也没有解决问题,修改了答案,解决办法如下,或配置php.ini,参考:http://jackxiang.com/post/8499/
问题出现的原因:
当主机填写为localhost时MySQL会采用 unix domain socket连接,当主机填写为127.0.0.1时MySQL会采用TCP/IP的方式连接。使用Unix socket的连接比TCP/IP的连接更加快速与安全。这是MySQL连接的特性,可以参考官方文档的说明4.2.2. Connecting to the MySQL Server:
On Unix, MySQL programs treat the host name localhost specially, in a way that is
likely different from what you expect compared to other network-based programs.
For connections to localhost, MySQL programs attempt to connect to the local server
by using a Unix socket file. This occurs even if a --port or -P option is given to
specify a port number. To ensure that the client makes a TCP/IP connection to the
local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP
address or name of the local server. You can also specify the connection protocol
explicitly, even for localhost, by using the --protocol=TCP option.
这个问题有以下几种解决方法:
使用TCP/IP代替Unix socket。即在连接的时候将localhost换成127.0.0.1。
修改MySQL的配置文件my.cnf,指定mysql.socket的位置:
/var/lib/mysql/mysql.sock (你的mysql.socket路径)。
直接在php建立连接的时候指定my.socket的位置(官方文档:mysqli_connect)。比如:
$db = new MySQLi('localhost', 'root', 'root', 'my_db', '3306', '/var/run/mysqld/mysqld.sock')
如果哪里没有说清楚或者说错了,欢迎提出了~~
______________________排查要点如下_______________________________
warning: mysqli::real_connect(): (hy000/1040): too many connections in:
出现场景 :手动编译安装mysql,并制定安装位置,php以localhost方式连接mysql
原因分析 :手动编译安装制定位置后所有的mysql文件都在制定的目录或者data目录下面,php默认只会寻找/temp/mysql.sock找这个sock文件,所以会导致sock文件无法找到。
解决方法 :
1.给sock文件做个软链
ln -s /data/mysqldb/mysql.sock /tmp/mysql.sock;
或者
2.修改php的默认mysql.sock连接地址
mysql.default_socket=/data/mysqldb/mysql.sock
3.使用tcp socket的方式进行连接
mysql('127.0.0.1','username','passwod');
来自:http://ju.outofmemory.cn/entry/144221