(技术分享) 解决 Firefox 显示“已阻止载入混合活动内容”的问题
Unix/LinuxC技术 jackxiang 2016-3-3 15:37
背景:自己是https的,想调用别人的一些华东解锁验证码的一些js不是https的,于是被阻止了,怎么办?
从 Firefox 18 开始,如果 HTTPS 页面中包含非加密的 HTTP 内容,浏览器会在控制台输出警告,记录 Mixed Active Content 请求。而从 Firefox 23 开始,浏览器会默认阻止 HTTPS 页面中可能影响网页安全的 HTTP 请求(即阻止 Mixed Active Content)。这样做会牺牲一些网站的兼容性,但对安全性的提高是很有帮助的。
获取 Mixed Content 相当于发起部分加密的连接,其中未加密的部分存在被中间人攻击的可能。不同类型的 Mixed Content 所产生的危害程度也有所不同,Mixed Passive Content 可能会使中间人获取到用户的设备信息,或让用户看到不正确的图片、音频等信息。而 Mixed Active Content 则可能导致用户的敏感数据被窃取,比如账号密码等。
解决问题
解决方案一 (一劳永逸)
避免在 HTTPS 页面中包含 HTTP 的内容。
解决方案二 (让 Firefox 暂时不阻止)
mixed_content_01
解决方案三 (配置本地 Firefox,让其不再阻止)
打开新标签页,在地址栏输入 about:config,进入配置页面。
mixed_content_02
为什么 Mixed Content Blocker 不是阻止所有的 HTTP 请求?
Mixed Content 可以分为两类:
Mixed Passive Content
Mixed Active Content
Mixed Passive Content (a.k.a. Mixed Display Content)
Mixed Passive Content 是在 HTTPS 页面中一些对安全性影响不大的 HTTP 内容,比如 Image、Audio、Video 等。即使这些内容被中间人篡改,所产生的影响也只是 —— 中间人得知了用户的浏览器信息 (through user-agent included by HTTP headers)、用户看到了一张不正确的图片,这些被篡改的内容无法修改 DOM 树,也无法执行。另外,Mixed Passive Content 在 Web 上普遍存在。因此 Firefox 默认不会阻止 Mixed Passive Content。
Mixed Active Content (a.k.a. Mixed Script Content)
Mixed Active Content 是在 HTTPS 页面中一些能够修改 DOM 树的 HTTP 内容,如 JavaScript、CSS、XMLHttpRequest、iFrame 等。这些 HTTP 内容被中间人修改以后,可能会影响原有 HTTPS 内容的安全性,导致敏感的用户数据被盗。因此 Firefox 会默认阻止 Mixed Active Content。
深入思考
为什么 Frame 应该是 Mixed Active Content?
Frame 之所以不能被分类为 Mixed Passive Content 主要有以下几个原因:
一个 frame 可以将外层可靠的 HTTPS 页面跳转到恶意盗取信息的仿造页面。
如果一个 HTTPS 页面嵌套着 HTTP frame,而这个 frame 包含表单用以输入用户信息,那么用户信息将会以 HTTP 方式传送,有被中间攻击者窃取的危险,而用户却毫不知情,还以为一切都在安全的 HTTPS 里。
如何判定 Mixed Content 是 Active 还是 Passive?
该 Mixed Content 是否会影响页面的 DOM 结构。(Yes -> Active, No -> Passive)
来自:http://www.ipeld.net/archives/8860.html
从 Firefox 18 开始,如果 HTTPS 页面中包含非加密的 HTTP 内容,浏览器会在控制台输出警告,记录 Mixed Active Content 请求。而从 Firefox 23 开始,浏览器会默认阻止 HTTPS 页面中可能影响网页安全的 HTTP 请求(即阻止 Mixed Active Content)。这样做会牺牲一些网站的兼容性,但对安全性的提高是很有帮助的。
获取 Mixed Content 相当于发起部分加密的连接,其中未加密的部分存在被中间人攻击的可能。不同类型的 Mixed Content 所产生的危害程度也有所不同,Mixed Passive Content 可能会使中间人获取到用户的设备信息,或让用户看到不正确的图片、音频等信息。而 Mixed Active Content 则可能导致用户的敏感数据被窃取,比如账号密码等。
解决问题
解决方案一 (一劳永逸)
避免在 HTTPS 页面中包含 HTTP 的内容。
解决方案二 (让 Firefox 暂时不阻止)
mixed_content_01
解决方案三 (配置本地 Firefox,让其不再阻止)
打开新标签页,在地址栏输入 about:config,进入配置页面。
mixed_content_02
为什么 Mixed Content Blocker 不是阻止所有的 HTTP 请求?
Mixed Content 可以分为两类:
Mixed Passive Content
Mixed Active Content
Mixed Passive Content (a.k.a. Mixed Display Content)
Mixed Passive Content 是在 HTTPS 页面中一些对安全性影响不大的 HTTP 内容,比如 Image、Audio、Video 等。即使这些内容被中间人篡改,所产生的影响也只是 —— 中间人得知了用户的浏览器信息 (through user-agent included by HTTP headers)、用户看到了一张不正确的图片,这些被篡改的内容无法修改 DOM 树,也无法执行。另外,Mixed Passive Content 在 Web 上普遍存在。因此 Firefox 默认不会阻止 Mixed Passive Content。
Mixed Active Content (a.k.a. Mixed Script Content)
Mixed Active Content 是在 HTTPS 页面中一些能够修改 DOM 树的 HTTP 内容,如 JavaScript、CSS、XMLHttpRequest、iFrame 等。这些 HTTP 内容被中间人修改以后,可能会影响原有 HTTPS 内容的安全性,导致敏感的用户数据被盗。因此 Firefox 会默认阻止 Mixed Active Content。
深入思考
为什么 Frame 应该是 Mixed Active Content?
Frame 之所以不能被分类为 Mixed Passive Content 主要有以下几个原因:
一个 frame 可以将外层可靠的 HTTPS 页面跳转到恶意盗取信息的仿造页面。
如果一个 HTTPS 页面嵌套着 HTTP frame,而这个 frame 包含表单用以输入用户信息,那么用户信息将会以 HTTP 方式传送,有被中间攻击者窃取的危险,而用户却毫不知情,还以为一切都在安全的 HTTPS 里。
如何判定 Mixed Content 是 Active 还是 Passive?
该 Mixed Content 是否会影响页面的 DOM 结构。(Yes -> Active, No -> Passive)
来自:http://www.ipeld.net/archives/8860.html
[实践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
阅读全文
[实践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
[实践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
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/
[实践OK]Linux系统批量修改用户密码方法
Unix/LinuxC技术 jackxiang 2016-2-4 10:35
背景:批量修改多台机器里的密码,怎么办,一台机器知道后,拷贝到另外机器上的办法,采用第三种较好。
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
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:is not under version control and is not part of the commit, yet its child解决办法
Unix/LinuxC技术 jackxiang 2016-2-2 16:47
背景:刚解决前面的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
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
因为SVN客户端版本为1.8以上,太新,跟服务器端不匹配。请卸载,安装1.7版,并重启。
请在新的目录中重新checkout代码,原workspace目录请废弃,不要在其中再执行SVN操作。
来自:http://blog.sina.com.cn/s/blog_4c81e6230101e18a.html
Nginx代理超时参数设置,对Tomcat的一次代理Nginx报504 Gateway Time-out排查出是tomcat出现500内部错误的备案。
Unix/LinuxC技术 jackxiang 2016-1-29 15:14
背景:Nginx代理到tomcat时出现504 Gateway Time-out。
如果是设置IP直接proxy则设置在nginx的http{ 里面即可,不用设置在server里。
摘自:http://www.ha97.com/5194.html
超时有问题不光是超时,更有可能是被反向代理的出现了500的内部服务器错误:
如果是设置IP直接proxy则设置在nginx的http{ 里面即可,不用设置在server里。
摘自:http://www.ha97.com/5194.html
超时有问题不光是超时,更有可能是被反向代理的出现了500的内部服务器错误:
背景:对于java和tomcat结合的程序,其实还是一个服务器,可能会有各种线程啥的如上传分片文件时会合并,这种对于PHP来讲是个问题,但是对于java来讲是能实现的边上传边合并的,也是非常好的,但是呢,这种办法如果写得不够好,很可能出现一些问题,假死、僵死,还不如用PHP写个上传,后台用那个守护进程进行合并来得更稳定。
阅读全文
阅读全文
[网络流量]Idle 是干嘛用的怎么占CPU98.5%id啥意思?用sar命令分析CPU的瓶颈,以及sar -n DEV查看网卡网络流量。
Unix/LinuxC技术 jackxiang 2016-1-29 10:51
背景:在一个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/
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/
[实践OK]LInux下的Cron Job定期删除其Log(日志)文件 - kevin_song
Unix/LinuxC技术 jackxiang 2016-1-27 11:46
背景:阿里上买了一小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
我的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
[实践OK]整合freeBSD下nginx+php+mysql安装方案(ports安装)
Unix/LinuxC技术 jackxiang 2016-1-27 11:19
安装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/
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,如下图:阅读全文
根本原因是队列一直在跑,网络调整时出现有些请求因调整没有及时返回,网络可能路很差了,一堆的timewait导致client机上的fd耗尽引发上面的问题,
可以用netstat看下TIMEWAIT情况,发现一大堆的TIMEWAIT,如下图:阅读全文
[实践OK]Centos/centos是7.0,而内核是3.10.0,CentOS 7 升级内核版本至 4.20,而centos7.1.1内核是4.1.1,直接升级内核到4.1.1的办法,CentOS 7.4默认内核是:3.10.0,升级到内核是升级到4.12,我的是4.15.9,再降级到4.12.4-1。
Unix/LinuxC技术 jackxiang 2016-1-24 12:23
核心操作:
如何从grub提示符返回grub菜单?执行normal命令使我回到grub菜单。
ubuntu 直接在开启时,(不要和我说vi,进不了系统)修改grub修改后怎么保存?此时不能保存,只能ctrl+x或F10运行,无误引导启动能进入系统后,再用软件编辑修改相关配置文件,保存。
grub相关命令:https://wenku.baidu.com/view/452dbe11f18583d04964591f.html
背景:阿里去的Centos是到7.0,而内核是3.10.0,而centos7.1.1内核是4.1.1,Linus说是新的内核性能上应该更强一些,实践证明升级后的感觉的确要强一些,新内核真不错。
最近,那个工控机出现升级后,黑屏,乃至进入不了系统,其Grub位置还不是在/etc/grub2.cfg,而是在 /boot/efi/EFI/centos/grub.cfg,怎么办
1)改Bios:BIos里设置为:UEFI CentOS7那个。
2)修改:/boot/efi/EFI/centos/grub.cfg在100行下面,也就是linuxefi /vmlinuz-4.16.1-1.el7.elrepo.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 下面加一行,并将成功的那个img给拷贝过去(我用的nc),注意权限:chmod 600 /boot/initramfs-4.16.1-1.el7.elrepo.x86_64.img chown root:root /boot/initramfs-4.16.1-1.el7.elrepo.x86_64.img:
initrdefi /initramfs-4.16.1-1.el7.elrepo.x86_64.img
步骤:
CentOS 7.4默认内核是:3.10.0,升级到内核是升级到4.12,我的是4.15.9,步骤如下,下面这个是在我的家里的小机器安装的,不是阿里云:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available #主要看有无 kernel-ml-headers编译网卡之用到。
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml kernel-ml-headers -y
Installing:
kernel-ml x86_64 5.17.0-1.el7.elrepo elrepo-kernel 56 M
kernel-ml-devel x86_64 5.17.0-1.el7.elrepo elrepo-kernel 14 M
kernel-ml-headers x86_64 5.17.0-1.el7.elrepo elrepo-kernel 1.6 M
https://jackxiang.com/post/11261/
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml
cat /etc/grub2.cfg |grep menuentry
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (4.20.3-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux
cat /etc/grub2.cfg |grep menuentry
cat /boot/efi/EFI/centos/grub.cfg |grep menuentry
grub2-set-default 'CentOS Linux (4.16.1-1.el7.elrepo.x86_64) 7 (Core)'
grub2-set-default 'CentOS Linux (4.16.9-1.el7.elrepo.x86_64) 7 (Core)'
grub2-set-default 'CentOS Linux (4.19.0-1.el7.elrepo.x86_64) 7 (Core)'
grub2-set-default 'CentOS Linux (5.7.10-1.el7.elrepo.x86_64) 7 (Core)'
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (4.15.9-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.el7.x86_64-advanced-0f2e2aec-2180-46ea-bb6a-9c39d7819d60' {
设置最新版本内核为默认启动:
此时,查看默认启动的系统版本grub2-editenv list:
[root@localhost tmp]# grub2-set-default 'CentOS Linux (4.15.9-1.el7.elrepo.x86_64) 7 (Core)'
[root@localhost tmp]# grub2-editenv list
saved_entry=CentOS Linux (4.15.9-1.el7.elrepo.x86_64) 7 (Core)
grub2-editenv list
saved_entry=CentOS Linux (4.20.3-1.el7.elrepo.x86_64) 7 (Core)
[实践OK]Centos7修改grub启动菜单等待时间:
https://jackxiang.com/post/10238/
reboot,重启之后再次查看 uname -a
uname -a
Linux localhost.localdomain 4.15.9-1.el7.elrepo.x86_64 #1 SMP Sun Mar 11 16:19:17 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
关于启动时加载哪个内核的更多设置参考:http://blog.csdn.net/wuhualong1314/article/details/79542904
升级指定旧版本的回退并指定版本的方法:
http://elrepo.org/linux/kernel/el7/x86_64/RPMS/
将rpm包下载上传到服务器上,使用下面的命令安装即可@http://mirror.rc.usf.edu/compute_lock/elrepo/kernel/el7/x86_64/RPMS/:
# yum -y install kernel-ml-devel-4.12.4-1.el7.elrepo.x86_64.rpm
# yum -y install kernel-ml-4.12.4-1.el7.elrepo.x86_64.rpm
yum localinstall kernel-ml-4.12.4-1.el7.elrepo.x86_64.rpm
yum localinstall kernel-ml-devel-4.12.4-1.el7.elrepo.x86_64.rpm
cat /boot/grub2/grub.cfg |grep menuentry
grub2-set-default 'CentOS Linux (4.12.4-1.el7.elrepo.x86_64) 7 (Core)'
Linux localhost.localdomain 4.12.4-1.el7.elrepo.x86_64 #1 SMP Thu Jul 27 20:03:28 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
删除没有用的内核:来自:https://blog.51cto.com/u_15079076/4296146,两点:一是开机时误按键盘出现问题是新的内核无法联网。(我估计是新内核与硬件网卡不兼容,不如旧的,于是得删除新的内核和太旧的内核 ,只留下一个就可以了。)
yum remove $(rpm -qa|grep kernel|grep -v $(uname -r))
==============================================================================================================================
Package 架构 版本 源 大小
==============================================================================================================================
正在删除:
kernel x86_64 3.10.0-693.21.1.el7 @updates 60 M
kernel x86_64 3.10.0-862.2.3.el7 @updates 62 M
kernel x86_64 3.10.0-862.3.2.el7 @updates 62 M
kernel x86_64 3.10.0-862.6.3.el7 @updates 62 M
kernel-ml x86_64 4.16.7-1.el7.elrepo @elrepo-kernel 199 M
kernel-ml x86_64 4.16.9-1.el7.elrepo @elrepo-kernel 200 M
kernel-ml x86_64 6.6.11-1.el7.elrepo @elrepo-kernel 345 M
kernel-ml-devel x86_64 4.16.7-1.el7.elrepo @elrepo-kernel 45 M
kernel-ml-devel x86_64 4.16.9-1.el7.elrepo @elrepo-kernel 45 M
kernel-ml-devel x86_64 6.6.11-1.el7.elrepo @elrepo-kernel 62 M
事务概要
==============================================================================================================================
移除 10 软件包
这个是用阿里云论坛里手工做好的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
如何从grub提示符返回grub菜单?执行normal命令使我回到grub菜单。
ubuntu 直接在开启时,(不要和我说vi,进不了系统)修改grub修改后怎么保存?此时不能保存,只能ctrl+x或F10运行,无误引导启动能进入系统后,再用软件编辑修改相关配置文件,保存。
grub相关命令:https://wenku.baidu.com/view/452dbe11f18583d04964591f.html
背景:阿里去的Centos是到7.0,而内核是3.10.0,而centos7.1.1内核是4.1.1,Linus说是新的内核性能上应该更强一些,实践证明升级后的感觉的确要强一些,新内核真不错。
最近,那个工控机出现升级后,黑屏,乃至进入不了系统,其Grub位置还不是在/etc/grub2.cfg,而是在 /boot/efi/EFI/centos/grub.cfg,怎么办
1)改Bios:BIos里设置为:UEFI CentOS7那个。
2)修改:/boot/efi/EFI/centos/grub.cfg在100行下面,也就是linuxefi /vmlinuz-4.16.1-1.el7.elrepo.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 下面加一行,并将成功的那个img给拷贝过去(我用的nc),注意权限:chmod 600 /boot/initramfs-4.16.1-1.el7.elrepo.x86_64.img chown root:root /boot/initramfs-4.16.1-1.el7.elrepo.x86_64.img:
initrdefi /initramfs-4.16.1-1.el7.elrepo.x86_64.img
步骤:
CentOS 7.4默认内核是:3.10.0,升级到内核是升级到4.12,我的是4.15.9,步骤如下,下面这个是在我的家里的小机器安装的,不是阿里云:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available #主要看有无 kernel-ml-headers编译网卡之用到。
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml kernel-ml-headers -y
Installing:
kernel-ml x86_64 5.17.0-1.el7.elrepo elrepo-kernel 56 M
kernel-ml-devel x86_64 5.17.0-1.el7.elrepo elrepo-kernel 14 M
kernel-ml-headers x86_64 5.17.0-1.el7.elrepo elrepo-kernel 1.6 M
https://jackxiang.com/post/11261/
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml
cat /etc/grub2.cfg |grep menuentry
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (4.20.3-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux
cat /etc/grub2.cfg |grep menuentry
cat /boot/efi/EFI/centos/grub.cfg |grep menuentry
grub2-set-default 'CentOS Linux (4.16.1-1.el7.elrepo.x86_64) 7 (Core)'
grub2-set-default 'CentOS Linux (4.16.9-1.el7.elrepo.x86_64) 7 (Core)'
grub2-set-default 'CentOS Linux (4.19.0-1.el7.elrepo.x86_64) 7 (Core)'
grub2-set-default 'CentOS Linux (5.7.10-1.el7.elrepo.x86_64) 7 (Core)'
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (4.15.9-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.el7.x86_64-advanced-0f2e2aec-2180-46ea-bb6a-9c39d7819d60' {
设置最新版本内核为默认启动:
此时,查看默认启动的系统版本grub2-editenv list:
[root@localhost tmp]# grub2-set-default 'CentOS Linux (4.15.9-1.el7.elrepo.x86_64) 7 (Core)'
[root@localhost tmp]# grub2-editenv list
saved_entry=CentOS Linux (4.15.9-1.el7.elrepo.x86_64) 7 (Core)
grub2-editenv list
saved_entry=CentOS Linux (4.20.3-1.el7.elrepo.x86_64) 7 (Core)
[实践OK]Centos7修改grub启动菜单等待时间:
https://jackxiang.com/post/10238/
reboot,重启之后再次查看 uname -a
uname -a
Linux localhost.localdomain 4.15.9-1.el7.elrepo.x86_64 #1 SMP Sun Mar 11 16:19:17 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
关于启动时加载哪个内核的更多设置参考:http://blog.csdn.net/wuhualong1314/article/details/79542904
升级指定旧版本的回退并指定版本的方法:
http://elrepo.org/linux/kernel/el7/x86_64/RPMS/
将rpm包下载上传到服务器上,使用下面的命令安装即可@http://mirror.rc.usf.edu/compute_lock/elrepo/kernel/el7/x86_64/RPMS/:
# yum -y install kernel-ml-devel-4.12.4-1.el7.elrepo.x86_64.rpm
# yum -y install kernel-ml-4.12.4-1.el7.elrepo.x86_64.rpm
yum localinstall kernel-ml-4.12.4-1.el7.elrepo.x86_64.rpm
yum localinstall kernel-ml-devel-4.12.4-1.el7.elrepo.x86_64.rpm
cat /boot/grub2/grub.cfg |grep menuentry
grub2-set-default 'CentOS Linux (4.12.4-1.el7.elrepo.x86_64) 7 (Core)'
Linux localhost.localdomain 4.12.4-1.el7.elrepo.x86_64 #1 SMP Thu Jul 27 20:03:28 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
删除没有用的内核:来自:https://blog.51cto.com/u_15079076/4296146,两点:一是开机时误按键盘出现问题是新的内核无法联网。(我估计是新内核与硬件网卡不兼容,不如旧的,于是得删除新的内核和太旧的内核 ,只留下一个就可以了。)
yum remove $(rpm -qa|grep kernel|grep -v $(uname -r))
==============================================================================================================================
Package 架构 版本 源 大小
==============================================================================================================================
正在删除:
kernel x86_64 3.10.0-693.21.1.el7 @updates 60 M
kernel x86_64 3.10.0-862.2.3.el7 @updates 62 M
kernel x86_64 3.10.0-862.3.2.el7 @updates 62 M
kernel x86_64 3.10.0-862.6.3.el7 @updates 62 M
kernel-ml x86_64 4.16.7-1.el7.elrepo @elrepo-kernel 199 M
kernel-ml x86_64 4.16.9-1.el7.elrepo @elrepo-kernel 200 M
kernel-ml x86_64 6.6.11-1.el7.elrepo @elrepo-kernel 345 M
kernel-ml-devel x86_64 4.16.7-1.el7.elrepo @elrepo-kernel 45 M
kernel-ml-devel x86_64 4.16.9-1.el7.elrepo @elrepo-kernel 45 M
kernel-ml-devel x86_64 6.6.11-1.el7.elrepo @elrepo-kernel 62 M
事务概要
==============================================================================================================================
移除 10 软件包
这个是用阿里云论坛里手工做好的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/
[实践OK]freebsd网卡安装与dhcp配置方法
Unix/LinuxC技术 jackxiang 2016-1-19 22:45
背景:如果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
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