Updated on 5月 14, 2019
Mono占用CPU100%
最近发现这个Mono + ASP.NET的环境似乎有点毛病
Mono占用CPU特别高
Google了一圈还是不知道为什么
于是从网上抄了别人写的一个脚本,每隔1分钟检测一次Mono的CPU占用,如果CPU占用过高就重启Mono
#!/bin/sh # monitor mono cpu usage record=0 while true; do cpu=$(top -b -n1 grep "mono" head -1 awk \'{print $9}\') pid=$(top -b -n1 grep "mono" head -1 awk \'{print $1}\') #cpu check result=${cpu/.*} if [[ $record == $pid ]];then kill -9 $pid;echo "$pid was killed";./startXingKongBeta.sh;fi if [[ $result > 95 $result == 100 ]];then let record=${pid};else let record=0;fi #echo echo `date +%F" "%H:%M:%S`+" cpu:$result% record pid:$record pid:$pid" sleep 60 done
Updated on 5月 14, 2019
服务器迁移
之前用的阿里云的服务器到期了,目前将服务器迁移到了一台新的VPS上
原来的网站是由IIS托管的ASP.Net网站
这台VPS的配置比之前的阿里云低多了,运行的是CentOS
为了将原来的网站直接迁移过来,采用了 Nginx + Mono 的方式运行
总之,恭贺新迁?
附上一篇CentOS搭建ASP.Net环境的教程
https://www.cnblogs.com/wander1129/archive/2011/12/16/mono.html
不过这篇文章中用的版本比较老了,建议自己装的时候都装最新的
Updated on 5月 14, 2019
JavaScript heap out of memory
这几天编译Angular工程总是编译不过,错误提示 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed – JavaScript heap out of memory
随后在Stackoverflow上找到了解决方法,现把解决方法贴出来备忘
在node_modules\\.bin下,对ng.cmd作如下修改
@IF EXIST "%~dp0\\node.exe" ( "%~dp0\\node.exe" --max_old_space_size=8192 "%~dp0\\..\\@angular\\cli\\bin\\ng" %* ) ELSE ( @SETLOCAL @SET PATHEXT=%PATHEXT:;.JS;=;% node --max_old_space_size=8192 "%~dp0\\..\\@angular\\cli\\bin\\ng" %* )
对ngc.cmd作如下修改
@IF EXIST "%~dp0\\node.exe" ( "%~dp0\\node.exe" --max_old_space_size=8192 "%~dp0\\..\\@angular\\compiler-cli\\src\\main.js" %* ) ELSE ( @SETLOCAL @SET PATHEXT=%PATHEXT:;.JS;=;% node --max_old_space_size=8192 "%~dp0\\..\\@angular\\compiler-cli\\src\\main.js" %* )
后记:
之后又不行了,我把.bin下的所有脚本都加上了–max_old_space_size=8192,然并卵。
后来在GitHub上看见一个回复(原文:https://github.com/angular/angular-cli/issues/5618)
在%AppData%\\npm下,找到ng.cmd(Windows),然后加上–max_old_space_size=8192
问题解决。
Updated on 5月 14, 2019
Welcome to emergency mode!
记录一下刚刚公司服务器挂掉和恢复的经过。
背景:一台阿里云服务器用作采集数据的备份服务器,为了做一些统计,我们在本地测试环境中不断查询备份服务器的数据库,可能由于查询强度比较高,2小时后该服务器突然无响应,ssh连接失败,在阿里云的监控图表上观察到CPU使用率和网络流量突然降到0,用阿里云控制台连接上后,输入用户名之后就再无响应。至此,判断该机器已死机,直接强制重启。
症状:重启后,CentOS7提示“Welcome to emergency mode!”,错误提示信息大意为 /dev/vdb1 挂载失败。
解决方法:打开 /etc/fstab ,注释掉对阿里云数据盘 vdb1 的自动挂载。重新启动,进入正常模式,输入命令 mount /dev/vdb1 /data 重新挂载 /dev/vdb1
顺便一提,阿里云帮助中心的这篇文章还是值的收藏的
Updated on 5月 14, 2019
好像被DDoS攻击了
2月27日早上7点左右,我的服务器CPU使用率爆表,Web服务无法访问,强制重启后又观察了一段时间,但是并没有发现什么异常。
2月28日上午8点左右,CPU再次爆表,但是我是到3月1日上午才发现的,赶紧强制重启,同样的,再次观察了一段时间,没有发现异常。
今天我看到这样一篇新闻《全球正遭受首个核弹级DDoS攻击,多个云服务器受到影响》
文中提到了这次工具是利用了Memcache的漏洞。然而!我的服务器上就装了Memcache!难道说?!
总之我暂时把Memcache关闭了
Updated on 5月 17, 2019
XingKongHttpServer-简单的Http服务器
Github项目地址: https://github.com/xingkongsync/xingkonghttpserver
示例/Usage
Step 1.
首先需要创建一个请求处理器类,并继承于HttpRequestHandlerBase,其中的Path为请求路径,Handler方法用于处理Http请求。
Firstly you need to create a request handler which is the subclass of HttpRequestHandlerBase.
namespace Demo.Controller
{
public class Home : HttpRequestHandlerBase
{
public Home()
{
Path = "/";
}
public override void Handler(HttpListenerRequest request, HttpListenerResponse response)
{
string html = "<html><head><title>Welcome</title></head><body>Welcome to XingKongHttpServer</body></html>";
//Content-Type: text/html
Html(response, html);
}
}
}
Step 2.
然后在你的主程序中创建该对象的实例,添加进HttpServer的路由中。
Create a instance of the class then add to the routher of the HttpServer.
namespace Demo
{
class Program
{
static void Main(string[] args)
{
int port = 8080;
HttpServer httpServer = new HttpServer(port);
httpServer.AddPath(new Home());
httpServer.Start();
Console.ReadLine();
httpServer.Stop();
}
}
}
Step 3.
至此,一个最简单的Http服务器已经搭建完成,编译并运行该程序,在浏览器中访问 http://localhost:8080 即可看到效果
注意:需要管理员权限运行。
OK, everthing is done, you can run the program and type “http://localhost:8080” on your browser, see what will happen.
Attention: Administrator privilege is required.
Other
另外,推荐将所有的请求处理器放入某个命名空间下,例如:“Demo.Controller”,然后在主程序中采用如下写法,即可自动加载该命名空间下的全部请求处理器。
By the way, I recommand to put all of your request handlers in a namespace such as “Demo.Controller”, then you can write your code like this, the HttpServer will load all request handler automatically.
namespace Demo
{
class Program
{
static void Main(string[] args)
{
int port = 8080;
HttpServer httpServer = new HttpServer(port);
httpServer.LoadController(typeof(Program), "Demo.Controller");
httpServer.Start();
Console.ReadLine();
httpServer.Stop();
}
}
}
Updated on 5月 14, 2019
通过WebHooks实现手机消息推送
继续研究了一下IFTTT,发现其实可以不用RSS来实现推送的,还有个更好的方法
就是利用IFTTT的WebHooks服务,WebHooks服务可以使用一个HTTP POST或GET方法作为一个触发器,并使用POST或GET方法作为动作
这里我们主要是使用WebHooks的触发器功能
1、首先打开http://ifttt.com/maker,确保你的WebHooks服务是可以用的
2、点击 My Applets,点击New Applet
3、if this then that, this选择WebHooks,Trigger选择Receive a web request,Event Name填一个有意义的,如push
4、if this then that, that选择Notification,参数填Value1 : Value2
5、最后不要忘记保存
创建完Applet之后回到http://ifttt.com/maker,在{event}出填入你的刚刚写的Event Name,然后把URL复制出来,
这个就是你的推送URL了,然后把Value1作为标题,Value2作为正文,使用一个POST请求就可以触发推送了
这种实现推送的方法相比之前的RSS方法,速度会很快,因为通过RSS实现推送其实是IFTTT通过轮询RSS接口来判断是否有新内容的
通常需要5分多钟才能收到推送
而通过WebHooks的方法速度无疑肯定最快,而且编程也简单,但是相比与RSS的方式,缺点就是不能像RSS那样,对每条推送设置一个URL
这样就仅仅是纯推送了,用户点击了并不会有任何跳转,不如RSS灵活。
Updated on 5月 14, 2019
大失误!
我tm刚刚改数据库手贱
把好多记录覆盖掉了我日
有tm近一半的博客日志蒸发了!!!
很气!
然后……凭借着以前的截图和记忆力把大部分失去的数据都补回来了 Orz
总结一下:珍爱生命,远离手动改库