分类目录归档:IT领域

监控linux服务器内存和运行时间的小作

话说阿黎的vps最近稍有不稳定现象,体现是服务器重启。

而且不是因为我这个vps自身配置问题,而是vps所在主机的重启。

阿黎小小的用php写了一个获取系统启动时间(运行时间)和内存占用的程序。

代码应该说比较丑陋,欢迎大家指出,阿黎在php方面只能说略懂,要经常翻手册。

 0)
		{
			$_ret = $_ret . $days . ' 天 ';
			$_upTime %= 24 * 60 * 60;
		}
		if (($hours = intval($_upTime / (60 * 60))) > 0)
		{
			$_ret = $_ret . $hours . ' 小时 ';
			$_upTime %= 60 * 60;
		}
		if (($minutes = intval($_upTime / 60)) > 0)
		{
			$_ret = $_ret . $minutes . ' 分钟 ';
			$_upTime %= 60;
		}

		return $_ret;
	}
	function getBootTimeStr()
	{
		//return getBootTime();
		return date('Y年n月j日 G:i:s', getBootTime());
	}
	function getMemUsePer()
	{
		$tMeminfo = file_get_contents('/proc/meminfo'); //linux
		$bufe = preg_split("/n/", $tMeminfo, 3, PREG_SPLIT_NO_EMPTY);
            foreach ($bufe as $buf) {
                if (preg_match('/^MemTotal:s+(.*)s*kB/i', $buf, $ar_buf)) {
                    $MemTotal = $ar_buf[1];
                } elseif (preg_match('/^MemFree:s+(.*)s*kB/i', $buf, $ar_buf)) {
                    $MemFree = $ar_buf[1];
                }
            }
		return 1 - $MemFree / $MemTotal;
	}
	
?>




服务器信息



运行时间:
启动时间:
内存使用率:%

新浪云计算初体验-SAE图床

今天晚上开始在新浪云计算平台SAE部署我的第一个应用,一个图床。程序代码据说是提取自isaid的,整个代码和教程来自于这里,其实这个算比较简单的一个组件吧,我只做了小部分修改。教程里面有的我就不重复了,下面说一下教程里面没有的。

开始使用使用新浪云计算的sdk上传代码的时候,需要先在新浪云计算应用中心,进入你的应用里面的 “应用管理-代码管理” 里面创建一个版本,版本只能是一个正整数,默认为1。创建版本之后,在本地sdk中选择“下载全部Apps”,然后对应到你的本地app目录(默认为你sdk目录下面的apps文件夹,例如我这里是E:saeSAE_SDK_Windows_1.0.5apps)里面应该有与应用名一致的文件夹,再往里面就是一个应用各版本的文件夹,以版本号为目录名。在这个以版本号数字为名的文件夹里面你需要放置code文件夹,code文件夹里面才是需要上传的代码,对应web的根目录。我一开始犯的错误就是没有使用创建代码版本,直接手工建立各级文件夹(例如我这里是E:saeSAE_SDK_Windows_1.0.5appshorsley1code,horsley是应用名)。

版本等问题解决之后我在sdk中点击“更新上传”按钮得到了一个error,说不存在config.yaml。有玩过用过Google App Engine (GAE)做各种应用(各种代理程序……##¥%&%¥)的童鞋应该大概知道这是一个配置文件,包含应用的版本号,应用名等信息。这个文件存放位置应该是在版本号文件夹下,与code文件夹处于同一层(例如我这里是E:saeSAE_SDK_Windows_1.0.5appshorsley1config.yaml)。没有这个文件夹怎么办呢?我们可以在sdk工具右上方文件列表窗口右键,选择菜单里面的“编辑config.yaml”,这时候他就会提示你“APP的config.yaml文件不存在,是否创建一个?”当我们点击“是”按钮之后它就会帮我们创建一个config.yaml文件,并且里面已经有需要的默认的内容了。这个文件创建好之后我们再上传代码就不会有问题了。

上传完之后按照教程进行安装初始化,安装成功之后开始登陆,登陆以后却出现了错误

SAE_Warning: Cannot modify header information – headers already sent by (output started at /data1/www/htdocs/605/horsley/1/config.php:1) in manager/index.phpon line 53

这个问题有点眼熟,以前折腾暨南人新闻网wordpress的时候遇到过。大概情况就是php里面用到了header函数,header函数要求必须在有任何实际浏览器输出之前调用,下面是php手册里面的对header函数的原文提示:

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

很多时候我们都需要调用header函数发送location的http都控制浏览器跳转,而这个错误的发生原因很多时候是我们不经意制造了一些浏览器输出。按照sae警告的内容找到这个config.php,在有行号显示的编辑器里面(例如我在使用的notepad++)打开这个文件可以很明显的看到文件末尾有一个空行,这就是问题所在。我们写c++代码的时候,使用例如我们作业要求的c-free5+mingw编译环境,如果文件末尾没有一个空行,将会产生一个编译器警告。php和c是同一系列的语言风格,不知道是不是这个原因所以在这个php文件末尾多了一个引起问题的空行。

突然想起一个东西,当我们为sae上边的应用创建一个新代码版本之后,sae默认写入一个index.php,内容如下

<?php
echo '<strong>Welcome to SAE!</strong>';
一开始我看了觉得很奇怪,怎么这个php标签没有闭合啊?简单google一下发现,其实这种写法有一个主要的好处:避免 ?> 后面的不可见字符(多余的空格、换行符)等破坏页面显示,也不会导致 Header already sent 这样的警告信息。因为没有结束标签 ?> 所以就算文件末尾有多余空行,用于没有php结束标签,这个空行就属于php解析的范围而不是直接的浏览器输出。在php代码范围里面,空行不产生输出也不影响代码。不过,我们也应该注意这个用法只能是在文件末尾的php结束标签?>才可以这样省略,其他地方我们还是需要使用结束标签的,例如php嵌入html。
凡事多思考,多问个为什么,这样才能有进步。

我们该如何利用互联网获得新知?

首先在这里想要说一下,我初定的博客努力方向,博客里面现有的文章很多是技术长文,身边的很多童鞋朋友可能不对其有好感。阿黎个人认为自己开个博客如果连自己身边的人都不能吸引的话,那是一个很失败的事情。所以阿黎决定在前期多写一些面向我们广大童鞋的简单易懂的文章,欢迎大家对阿黎的文章提出各种意见。

====================正题分割线=======================

你懂得如何使用网络吗?

这个问题貌似问得有点好笑,在暨大,或者扩大到在我们大学生的群体当中,估计电脑的普及率还是相当高的。阿黎是在高二那年的劳动节才拿到一台二手台式电脑自用,但是很多童鞋估计很小就开始拥有电脑,使用电脑。随着网络的普及,有电脑不联网的情况已经不多了(除了放假回家可能考虑到时间较短拉宽带代价高,阿黎便是如此)。或者就直接说我们在学校的时候吧,网络随手可得(阿黎几乎除了睡觉时间都在上网)。那么,小标题的这个问题,还是个问题么?莫非你想说我不会使用网络?我不天天用着呢。

上网的时候都在干些什么?

各位童鞋上网的时候都在干些什么呢?我们大部分人可能是这样的:打开电脑,网络已经自动连上了,点开QQ,哎呦好多未读消息,空间/微博/人人打开,好多新动态~~我看啊翻啊,看见有趣的东西我就回复/转发一个?信息流看到页底之后,发现提示谁谁谁又更新了动态什么的,于是翻到页头继续看,如此就陷入了一个死循环……上网时间是这样用的童鞋请自觉举起你的右手。

干这一些我获得了什么?

你可能觉得,我这样上网没什么问题的啊,我获得了很多东西啊,我知道了我朋友们的动态,有时还能看到他们分享的一些好文章呢。嗯,听起来蛮有道理的,但你能说说今天你花的这几个小时,获得了哪些有价值的信息、有帮助的知识吗。或许你转了几篇蛮有技术含量的文章,但你有去看吗,你看懂了吗?

sns是个浪费时间的玩意!

阿黎身边的童鞋朋友可能发现,之前阿黎好长一段时间停止了所有的sns更新,包括qq空间、微博、人人。其实这正是因为我认为sns太浪费时间了,它们在你打开页面之后,就会不断的给你提醒有新的信息什么的,其实是一种强制给你灌输信息的实质。我们有多少童鞋是从打开电脑到关电脑一直开着浏览器一直刷着微博等sns的页面的?所以阿黎个人否定这一种浪费时间在sns上面的互联网利用方式。

当前我们是如何获取新知识的?

其实,普遍地说,人生存着无时无刻不在接受着新知识,最常规的,是我们的教育。想想我们平时的一天是怎么过的,上课?课堂是获取知识的其中一种方式,希望大家都是有好好认真去听课的(不像阿黎)。认真想一下,阿黎觉得,比起大学之前,现在在课堂上好像能学到的东西越来越少了。除了课堂,如果阿黎浑浑噩噩的过的话,那么可以说我获取新知的脚步基本停了,这是一个很可怕的事情,人的生命在于不断学习,亲爱的童鞋们你们自己好好思考一下有没有这么一回事。

那不是还有互联网么?我们不是天天在上网么,阿黎你说sns浪费时间,那么

==========我们该如何利用互联网获得新知?============

搜索意识

人非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。在大学这个很强调独立自主的地方,很多时候有疑惑有问题只能自己去弄清楚,那么阿黎想说,很多时候,谷歌百度是个好老师。相信身边很多人都被阿黎骂过没有“百度意识”,在这里直接说搜索意识(因为阿黎越来越讨厌百度了),那么搜索意识是什么呢?

其实,不仅是学习上,而且在生活中,各个方面我们随时都会遇到问题,那么,遇到问题的时候你能够恰当的想起来利用搜索引擎解决问题,这就是我口中的搜索意识。当然了,我这里说了要恰当,不可能说我钥匙找不到了我也 Google 一下,但是要知道很多问题都是可以通过搜索解决的(童鞋们的作业啊神马的肯定不是这样解决的对不?)。例如阿黎今天中午做饭,要做凉瓜炒蛋,阿黎第一时间就专门去搜了凉瓜炒蛋要怎么做才好吃,然后最终问题就很好的被解决了。

这可以说是一种反射吗?学生物的童鞋来说一句。阿黎本人可能已经在大脑里面形成了一种条件反射——有问题,搜索去。没错,要的就是这种程度,当你更多的使用搜索引擎,你可能发觉互联网变得更友好了。而形成在网上进行搜索以解决问题的这样一种习惯性思维即搜索意识,是很有帮助的。总是觉得太多的童鞋朋友对于搜索引擎这种方便实用的互联网工具认识不深,更谈不有搜索意识。这里再提一点,google一下“阿黎的个人博客”第一个结果就是阿黎的博客啦,百度那边还没有。

如何用好搜索引擎

你可能会说,我知道百度谷歌啊,但是我经常搜不到我要的东西啊。这个问题就是搜索技巧的范畴了。你脑海里应该要有这个概念:如果这个问题不是相当相当冷门的问题,搜索引擎应该能够搜到的而你没有搜出来,那是你的能力问题,学习搜索技巧也是必须的。搜索引擎有很多技巧,甚至它还有一些特定语法规则来辅助搜索,在这里阿黎只说实用的。

你往搜索框里面输入什么了?

在网上,很多网站各种要填表单的地方,都会在要填的表单域前面辅以文字说明告诉你这个框框里面要填点什么?但是搜索框这个东西,一般不会有什么提示,最多就只有一个放大镜模样的按钮。有没有人告诉过你,或者你知不知道,那个搜索的输入框要填的是关键词,没错,是词。一般搜索引擎容许你打进去一个句子,甚至带上问号。但我们提倡简化输入的查询信息,同时要注意你所使用的字词是否正确。

怎么输入关键词能找到我想要的信息

阿黎在这里说一个比较简单易行的办法。首先,你要明确你想找的信息是什么,包含你想要的信息的这个页面应该包含些什么内容,然后就是一般的提取关键词的操作了,把你想要的那些结果页面的关键词提取出来输入进去搜索框就没错了,对于有的童鞋可能正确提取关键词是一个不简单的事情。我们应该尽量去精确我们的关键词,不要选择那些含义比较宽泛的关键词。

其他高级搜索技巧

这里阿黎暂时只说一个阿黎比较常用的“site:”语法,使用它可以指定你搜索的范围,有的时候某些网站自身的搜索做的不好或者是有限制,例如很多论坛规定要先注册会员才可以使用站内的搜索,这时候我们就可以用一般的关键词加上“site:网址”这样的命令指定搜索某个网站里面的东西,例如要搜索阿里博客里面的东西就可以在关键词之后加上site:a-li.me。还有很多其他特别的语法如果童鞋们有兴趣也可以去搜索来看一下。

稳定的获取知识途经

等待下一篇,阿黎将手把手教你使用google reader