Commit 428f29f5 authored by mercury233's avatar mercury233

add memwatch & heapdump to debug memory leak

parent 66b47f1b
...@@ -18,6 +18,10 @@ request = require 'request' ...@@ -18,6 +18,10 @@ request = require 'request'
bunyan = require 'bunyan' bunyan = require 'bunyan'
memwatch = require 'memwatch'
heapdump = require 'heapdump'
#配置文件 #配置文件
settings = require './config.json' settings = require './config.json'
...@@ -30,8 +34,6 @@ Deck = require './deck.js' if settings.modules.database ...@@ -30,8 +34,6 @@ Deck = require './deck.js' if settings.modules.database
victories = require './victories.json' victories = require './victories.json'
#debug模式 端口号+1 #debug模式 端口号+1
debug = false debug = false
log = null log = null
...@@ -42,6 +44,11 @@ if process.argv[2] == '--debug' ...@@ -42,6 +44,11 @@ if process.argv[2] == '--debug'
else else
log = bunyan.createLogger name: "mycard" log = bunyan.createLogger name: "mycard"
memwatch.on 'leak', (info) ->
log.info('Memory leak detected: ', info);
#网络连接 #网络连接
net.createServer (client) -> net.createServer (client) ->
server = new net.Socket() server = new net.Socket()
...@@ -191,6 +198,16 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -191,6 +198,16 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
} }
client.end() client.end()
else if info.pass=='logdump'
file = '/tmp/myapp-' + process.pid + '-' + Date.now() + '.heapsnapshot';
heapdump.writeSnapshot(file);
ygopro.stoc_send_chat(client,"OK")
ygopro.stoc_send client, 'ERROR_MSG',{
msg: 1
code: 2
}
client.end()
else if (os.freemem() / os.totalmem())<=0.1 else if (os.freemem() / os.totalmem())<=0.1
ygopro.stoc_send_chat(client,"服务器已经爆满,请稍候再试") ygopro.stoc_send_chat(client,"服务器已经爆满,请稍候再试")
ygopro.stoc_send client, 'ERROR_MSG',{ ygopro.stoc_send client, 'ERROR_MSG',{
......
// Generated by CoffeeScript 1.9.3 // Generated by CoffeeScript 1.9.3
(function() { (function() {
var Deck, Room, User, WebSocketServer, _, bunyan, debug, dialogues, execFile, fs, http, http_server, i, level_points, log, mycard, net, originIsAllowed, os, path, request, settings, tips, url, victories, waiting, wsServer, ygopro, var Deck, Room, User, WebSocketServer, _, bunyan, debug, dialogues, execFile, fs, heapdump, http, http_server, i, level_points, log, memwatch, mycard, net, originIsAllowed, os, path, request, settings, tips, url, victories, waiting, wsServer, ygopro,
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
net = require('net'); net = require('net');
...@@ -29,6 +29,10 @@ ...@@ -29,6 +29,10 @@
bunyan = require('bunyan'); bunyan = require('bunyan');
memwatch = require('memwatch');
heapdump = require('heapdump');
settings = require('./config.json'); settings = require('./config.json');
ygopro = require('./ygopro.js'); ygopro = require('./ygopro.js');
...@@ -65,6 +69,10 @@ ...@@ -65,6 +69,10 @@
}); });
} }
memwatch.on('leak', function(info) {
return log.info('Memory leak detected: ', info);
});
net.createServer(function(client) { net.createServer(function(client) {
var ctos_buffer, ctos_message_length, ctos_proto, server, stoc_buffer, stoc_message_length, stoc_proto; var ctos_buffer, ctos_message_length, ctos_proto, server, stoc_buffer, stoc_message_length, stoc_proto;
server = new net.Socket(); server = new net.Socket();
...@@ -218,7 +226,7 @@ ...@@ -218,7 +226,7 @@
}); });
ygopro.ctos_follow('JOIN_GAME', false, function(buffer, info, client, server) { ygopro.ctos_follow('JOIN_GAME', false, function(buffer, info, client, server) {
var j, len, ref; var file, j, len, ref;
if (info.version !== settings.version) { if (info.version !== settings.version) {
ygopro.stoc_send(client, 'ERROR_MSG', { ygopro.stoc_send(client, 'ERROR_MSG', {
msg: 4, msg: 4,
...@@ -232,6 +240,15 @@ ...@@ -232,6 +240,15 @@
code: 2 code: 2
}); });
return client.end(); return client.end();
} else if (info.pass === 'logdump') {
file = '/tmp/myapp-' + process.pid + '-' + Date.now() + '.heapsnapshot';
heapdump.writeSnapshot(file);
ygopro.stoc_send_chat(client, "OK");
ygopro.stoc_send(client, 'ERROR_MSG', {
msg: 1,
code: 2
});
return client.end();
} else if ((os.freemem() / os.totalmem()) <= 0.1) { } else if ((os.freemem() / os.totalmem()) <= 0.1) {
ygopro.stoc_send_chat(client, "服务器已经爆满,请稍候再试"); ygopro.stoc_send_chat(client, "服务器已经爆满,请稍候再试");
ygopro.stoc_send(client, 'ERROR_MSG', { ygopro.stoc_send(client, 'ERROR_MSG', {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment