什么是luaprofiler?

http://luaprofiler.luaforge.net/manual.html

LuaProfiler is a time profiler designed to help finding bottlenecks on your Lua program.

If you use LuaProfiler into your program, it will generate a log of all your function calls and their respective running times. You can use this log to generate a summary of the functions your program uses, along with how long it stayed in each of them, or you can import the log into a spreadsheet for further analysis.

LuaProfiler is free software and uses the same license as Lua 5.1.

此工具是检测lua代码中, 对于lua执行速度有影响代码点, 即程序的效率瓶颈。

此工具会产生一个 函数调用的 log, 每个调用会产生响应的运行时间。

可以使用工具产生 总结性质的表, 此表能够统计各个函数调用的耗时, 并可以将此表导入 电子表格软件,然后进一步分析。

最重要的一点是, 此工具仅仅与lua5.1 兼容。

Status

Current version is 2.0.2. It was developed for Lua 5.1.

github网址:

https://github.com/luaforge/luaprofiler

软件下载:

release bin

http://files.luaforge.net/releases/luaprofiler/LuaProfilerbinaries/version1.1forlinux

code

http://files.luaforge.net/releases/luaprofiler/LuaProfiler/LuaProfiler2.0.2

luaprofiler构成

http://luaprofiler.luaforge.net/manual.html

For flexibility reasons, LuaProfiler is divided in 2 parts: the Lua code profiler, written in C to maximize the precision of timing, and the analyzer that generates information about the program execution, written in Lua to allow greater variance in the analysis process.

analyzer 中是 summary.lua

安装

The easies way to install LuaProfiler is through LuaRocks. Just do luarocks install luaprofiler and LuaRocks will download and install LuaProfiler on all major platforms.

If you want to install by hand, LuaProfiler source is distributed as a group of C files and some makefile templates. LuaProfiler follows the package model for Lua 5.1, therefore it should be "installed" in your package.path.

http://luaprofiler.luaforge.net/manual.html

luarocks install luaprofiler

luaprofiler使用

http://luaprofiler.luaforge.net/manual.html

Just require"profiler" in your script and this will define a profiler module with two functions:

start([filename])
Starts the profiler using the optional filename as the log file.
stop()
Stops the profiler.

You can restart the profiler after a stop with another call to start.

All you need now is to run your program and get the output generated by the profiler. The default log file is written to the working directory of the program, in a file like lprof_randomid.out where randomid is a random number. The log format uses a line for every function call in your program which may result in huge files, so be careful with disk space if your program runs for a long time, or use localized profiling wrapping the target section with a start()/stop() call sequence.

示例

在 replace.lua中添加 profiler检测代码:

local profiler = require("profiler")

profiler.start()

for _,file in ipairs(targetFiles) do
    print("handling file =".. file)
    handle_file(file)
end

profiler.stop()

------------------------------------------  handle file end ------------------------------------------

运行 replace.lua,发现确实产生一个 lprof_fileYLIo8z.out:

root@fqs:/home/share/luascript/replace# lua replace.lua
parse trans_table starting .....
line=    you  lucy
well formed line=    you  lucy
line=
parse trans_table ending .....
handling file =./replaceFiles/test.txt
you==>lucy
root@fqs:/home/share/luascript/replace# ls
config.lua  lprof_fileYLIo8z.out  replaceFiles  replace.lua

查看日志内容:

root@fqs:/home/share/luascript/replace# cat lprof_fileYLIo8z.out
stack_level    file_defined    function_name    line_defined    current_line    local_time    total_time
0    (C)    profiler_init    -1    -1    0.000010    0.000010
0    =[C]    ipairs    -1    232    0.000002    0.000002
0    =[C]    (for generator)    -1    232    0.000002    0.000001
1    =[C]    called from print    -1    -1    0.000003    0.000003
0    =[C]    print    -1    233    0.000024    0.000028
1    =[C]    open    -1    151    0.000010    0.000010
1    =[C]    assert    -1    151    0.000001    0.000001
1    =[C]    read    -1    152    0.000014    0.000014
1    =[C]    close    -1    153    0.000007    0.000008
1    =[C]    pairs    -1    155    0.000001    0.000002
1    =[C]    (for generator)    -1    155    0.000002    0.000002
2    =[C]    called from print    -1    -1    0.000003    0.000002
1    =[C]    print    -1    156    0.000012    0.000016
1    =[C]    gsub    -1    157    0.000003    0.000003
1    =[C]    (for generator)    -1    155    0.000001    0.000001
1    =[C]    open    -1    223    0.000033    0.000033
1    =[C]    assert    -1    223    0.000005    0.000004
1    =[C]    write    -1    224    0.000009    0.000008
1    =[C]    close    -1    225    0.000096    0.000096
0    @replace.lua    handle_file    147    234    0.000114    0.000300
0    =[C]    (for generator)    -1    232    0.000002    0.000002
0    =[C]    stop    -1    237    0.000001    0.000001
root@fqs:/home/share/luascript/replace#

使用summary统计下:

root@fqs:/home/share/luascript/replace# /usr/local/bin/summary.lua -v lprof_fileYLIo8z.out
Node name    Calls    Average per call    Total time    %Time
handle_file    1    0.000114    0.000114    32.112676056338
close    2    5.15e-05    0.000103    29.014084507042
open    2    2.15e-05    4.3e-05    12.112676056338
print    2    1.8e-05    3.6e-05    10.140845070423
read    1    1.4e-05    0.000014    3.943661971831
profiler_init    1    1e-05    0.000010    2.8169014084507
write    1    9e-06    0.000009    2.5352112676056
(for generator)    4    1.75e-06    7e-06    1.9718309859155
called from print    2    3e-06    6e-06    1.6901408450704
assert    2    3e-06    6e-06    1.6901408450704
gsub    1    3e-06    0.000003    0.84507042253521
ipairs    1    2e-06    0.000002    0.56338028169014
pairs    1    1e-06    0.000001    0.28169014084507
stop    1    1e-06    0.000001    0.28169014084507
root@fqs:/home/share/luascript/replace#

luaprofiler探索的更多相关文章

  1. 【探索】机器指令翻译成 JavaScript

    前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...

  2. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  3. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  4. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  5. Linux学习之探索文件系统

    Linux,一起学习进步-    ls With it, we can see directory contents and determine a variety of important file ...

  6. 马里奥AI实现方式探索 ——神经网络+增强学习

    [TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...

  7. C++随笔:.NET CoreCLR之GC探索(4)

    今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...

  8. C++随笔:.NET CoreCLR之GC探索(2)

    首先谢谢 @dudu 和 @张善友 这2位大神能订阅我,本来在写这个系列以前,我一直对写一些核心而且底层的知识持怀疑态度,我为什么持怀疑态度呢?因为一般写高层语言的人99%都不会碰底层,其实说句实话, ...

  9. 【腾讯优测干货分享】安卓专项测试之GPU测试探索

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ffdc0569a1191bce8a63 作者:章未哲——腾讯SNG质 ...

随机推荐

  1. ACM 心急的C小加

    心急的C小加 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的 ...

  2. 第一天 Linux 是什么

    众所周知,Linux的核心原型是1991年由托瓦兹(Linus Torvalds)写出来 计算机是由一堆硬件所组成的,为了有敁率的控制这些硬件资源,于是乎就有操作系统产生了.       到了1985 ...

  3. 【BZOJ】1135: [POI2009]Lyz

    题意 有\(1\)到\(n(1 \le n \le 200000)\)号的溜冰鞋各\(k(1 \le k \le 10^9)\)双.已知\(x\)号脚的人可以穿\(x\)到\(x+d\)的溜冰鞋. 有 ...

  4. 【CodeVS】p1079 回家

    题目描述 Description 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一 ...

  5. lsof在运维中的应用

    场景一:文件系统使用率很高,但是找不到具体哪个文件占用了空间 原因:在unix系统中,如果有两个进程同时使用一个文件,如果其中一个进程删除了这个文件,但是这个文件此刻不会正真被释放,一直要等待引用它的 ...

  6. 基于MINA构建简单高性能的NIO应用

    mina是非常好的C/S架构的java服务器,这里转了一篇关于它的使用感受. 前言MINA是Trustin Lee最新制作的Java通讯框架.通讯框架的主要作用是封装底层IO操作,提供高级的操作API ...

  7. mysql双主复制总结

    双主复制: 1).在两台服务器上各自建立一个具有复制权限的用户: 2).修改配置文件: # 主服务器A上 [mysqld] server-id = 10 log-bin = mysql-bin rel ...

  8. WordPattern

    Given a pattern and a string str, find if str follows the same pattern. Examples: pattern = "ab ...

  9. 读《深入php面向对象、模式与实践》有感(一)

    什么样的代码需要改进?书中给出了四个标准(我个人比较认可这四个标准,实际开发中也的确时常遇到): 一.代码重复 用书中的原话讲:“如果你在写代码的时候,总是感觉似曾相识,很可能你的代码已经重复了”. ...

  10. .net Sql语句批量插入数据库数据

    #region 使用SqlBulkCopy public static bool ExecuteTransactionScopeInsert(DataTable dt, int batchSize) ...