summaryrefslogtreecommitdiff
path: root/server-beta/src/service/service.lua
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2019-11-10 23:10:32 +0800
committer最萌小汐 <sumneko@hotmail.com>2019-11-10 23:10:32 +0800
commit79ebe02d82c1f3b527bf2a926cdcd23b57177bd6 (patch)
treef399566349018f6813d1bcd97b5d36b3f11521f2 /server-beta/src/service/service.lua
parenta36f8786bdf123fdaa894427e3ab2cdfa71da72a (diff)
downloadlua-language-server-79ebe02d82c1f3b527bf2a926cdcd23b57177bd6.zip
默认不主动垃圾回收
Diffstat (limited to 'server-beta/src/service/service.lua')
-rw-r--r--server-beta/src/service/service.lua52
1 files changed, 47 insertions, 5 deletions
diff --git a/server-beta/src/service/service.lua b/server-beta/src/service/service.lua
index 1d65a1ea..388f96c4 100644
--- a/server-beta/src/service/service.lua
+++ b/server-beta/src/service/service.lua
@@ -3,23 +3,46 @@ local thread = require 'bee.thread'
local await = require 'await'
local timer = require 'timer'
local proto = require 'proto'
+local searcher = require 'searcher'
local m = {}
m.type = 'service'
-function m.reportMemory()
+local function countMemory()
local mems = {}
- local totalMem = 0
+ local total = 0
mems[0] = collectgarbage 'count'
- totalMem = totalMem + collectgarbage 'count'
+ total = total + collectgarbage 'count'
for id, brave in ipairs(pub.braves) do
mems[id] = brave.memory
- totalMem = totalMem + brave.memory
+ total = total + brave.memory
+ end
+ return total, mems
+end
+
+function m.reportMemoryCollect()
+ local totalMemBefore = countMemory()
+ local clock = os.clock()
+ collectgarbage()
+ local passed = os.clock() - clock
+ local totalMemAfter, mems = countMemory()
+
+ local lines = {}
+ lines[#lines+1] = ' --------------- Memory ---------------'
+ lines[#lines+1] = (' Total: %.3f(%.3f) MB'):format(totalMemAfter / 1000.0, totalMemBefore / 1000.0)
+ for i = 0, #mems do
+ lines[#lines+1] = (' # %02d : %.3f MB'):format(i, mems[i] / 1000.0)
end
+ lines[#lines+1] = (' Collect garbage takes [%.3f] sec'):format(passed)
+ return table.concat(lines, '\n')
+end
+
+function m.reportMemory()
+ local totalMem, mems = countMemory()
local lines = {}
lines[#lines+1] = ' --------------- Memory ---------------'
- lines[#lines+1] = (' Total: %.3f MB'):format(totalMem / 1000.0)
+ lines[#lines+1] = (' Total: %.3 MB'):format(totalMem / 1000.0)
for i = 0, #mems do
lines[#lines+1] = (' # %02d : %.3f MB'):format(i, mems[i] / 1000.0)
end
@@ -57,6 +80,24 @@ function m.reportTask()
return table.concat(lines, '\n')
end
+function m.reportCache()
+ local total = 0
+ local dead = 0
+
+ for cache in pairs(searcher.cacheTracker) do
+ total = total + 1
+ if cache.dead then
+ dead = dead + 1
+ end
+ end
+
+ local lines = {}
+ lines[#lines+1] = ' --------------- Coroutine ---------------'
+ lines[#lines+1] = (' Total: %d'):format(total)
+ lines[#lines+1] = (' Dead: %d'):format(dead)
+ return table.concat(lines, '\n')
+end
+
function m.report()
local t = timer.loop(60.0, function ()
local lines = {}
@@ -64,6 +105,7 @@ function m.report()
lines[#lines+1] = '========= Medical Examination Report ========='
lines[#lines+1] = m.reportMemory()
lines[#lines+1] = m.reportTask()
+ lines[#lines+1] = m.reportCache()
lines[#lines+1] = '=============================================='
log.debug(table.concat(lines, '\n'))