上次写了一个lua内存泄露检测的脚本,现在将它的实现原理拿出来和大家分享一下,希望能有所帮助。lua内存泄露:        首先第一点,lua中的内存泄露和我们所说的c/c++中的内存泄露本质上是不一样的。        lua中有垃圾回收机制(GC),所以理论上是不会有内存泄露的。当它进行GC的时候,会从根部开始扫
转载 2024-03-25 17:28:56
54阅读
背景在查询类开发中我们有使用缓存的场景,一般可以使用Redis作为缓存,来缓解数据库如MySQL的压力。使用缓存的步骤为:(1)从Redis缓存中获取数据,如果存在数据,直接返回值。(2)如果不存在,执行数据库的查询方法(3)将数据库中的值放入缓存NO CODE NO BB,代码如下//a.从缓存中获取 String value = redisTemplate.opsForValue().get(
转载 2023-10-26 17:34:36
77阅读
DAPI 错误代码 错误代码: 0xC0000080 错误转换: BERR_GENERAL_FAILURE 发生问题: 一种常规失败。 错误代码: 0xC0000081 错误转换: DAPI_E_BAD_HANDLE 问题: 一种错误 DAPI 处理提供给调用。 错误代码: 0xC0000082 错误转换: DAPI_E_HEADER_MUST_BE_TEXT 问题: 标头值必须被指定为文本字
转载 2024-03-17 15:07:57
469阅读
由于目前正在负责的项目是一个二次开发项目,而且留给我们的代码质量实在让人无力吐槽,所以遇到了不少大大小小的坑,好在慢慢都淌过去了。最近就遇到了一个内存泄漏的问题,泄漏发生在lua里,项目代码里以前的开发团队留下了检测泄漏的代码,但也仅限于此。由于代码量庞大,所以想从逻辑上梳理清楚哪里的引用没干掉导致了内存泄漏几乎就是大海捞针。好在解决的过程比较顺利,这篇文章就来谈一谈Lua中如何解决内存泄漏的问题
转载 2024-04-24 09:13:20
86阅读
Java 内存堆栈分析,是我们在分析线上问题常用的手段。线上会遇到一些问题从日志上无法分析的疑难问题。我们可以分析一些JVM内存,来看看问题到底出在哪里了。在生产环境上一般不允许我们使用一些例如JMX或是JProfile(我也是刚刚了解到)这类的工具。这类工具通常使用在开发测试中解决性能瓶颈和理解问题用到。今天我介绍一下我用过的一些工具,他们都不是在线分析工具,都需要先收集JVM内存消息导入到文件
假定你要拼接很多个小的字符串为一个大的字符串,比如,从一个文件中逐行读入字符串。你可能写出下面这样的代码: 尽管这段代码看上去很正常,但在Lua中他的效率极低,在处理大文件的时候,你会明显看到很慢,例如,需要花大概1分钟读取350KB的文件。(这就是为什么Lua专门提供了io.read(*all)选项,读取同样的文件只需要0.02s)为什么这样呢?Lua使用真正的垃圾收集算法,但他发现程序使用太多
转载 2024-03-19 12:46:35
223阅读
Lua会造成内存泄露的表征分析: #因素一:(实例型)实体资源的创建持有者和调用者,相互之间如果太过信任,那么对调用者就会形成过高的要求,创建者可以让任意的调用者进行任意的create,调用者消费后以为创建者会管理(销毁),但其实并非如此,比如有这样一个实体管理器xxxManager,它有接口createXXX/removeXXX, 那么,创建和销毁的权利都丢给了调用者,如果调用者光creat
转载 2024-04-15 11:31:58
95阅读
上周UWA发表了一片博文Lua性能优化—Lua内存优化作者分享了在unity中lua使用的不少干货,文中提到两个lua的小插件,一个是内存检查工具Snapshot,一个是性能分析工具LuaProfiler。 正好上周笔者也涉猎到了这方面的实践上,作为记录我将操作步骤分享下。 1.首先Snapshot是云风大大曾经的一篇博文提到的工具一个 Lua 内存泄露检查工具 2.其次Profiler也是
转载 2024-03-22 20:07:28
131阅读
这两天剖析了一下socket.lua,整体不是很难,主要是数据缓冲区的实现需要好好分析一下。这里读写数据也是用到了缓冲池的思想,为了更加直观的说明代码,还有方便测试,我去掉lua代码,把核心接口直接用C++实现了一遍:#include <stdio.h> #include <string.h> #include <vector> using std::vecto
转载 2024-02-27 14:59:34
180阅读
Redis常见缓存问题及解决方案缓存穿透缓存击穿缓存雪崩热key引发的问题产生的原因如何监控发现解决方案大key引发的问题产生的原因解决方案大key删除法 缓存穿透大量请求请求根本不存在的资源(DB本身就不存在,Redis更是不存在),就会将请求直接打在DB服务器上。解决方案接口校验:对于id=-3872这些无效访问就直接拦截,不允许这些请求到达Redis、DB上。对空值进行缓存:虽然数据库中没
转载 2024-06-24 21:23:04
97阅读
作者:敏捷小菜 本文从Lua语法的角度来介绍Lua内存出现泄露的问题; 1、在多次刷新的情况下不停的 新建table; 如 Update()是一个不停被回调的函数,那么在Update里, function Update() local t = {};--创建表,内存泄露,游戏常见到 end
转载 2024-03-23 12:39:14
147阅读
上一节讲到了worker进程的共享内存,它利用丰富的指令使数据的缓存操作变得非常简单,但它也存在一些缺点。1.worker进程之间会有锁竞争,在高并发的情况下会增加性能开销。2.只支持Lua布尔值、数字、字符串和nil类型的数据,无法支持table类型的数据。3.在读取数据时有反序列化操作,会增加CPU开销。共享内存在Ngx_Lua中作为缓存工具还是非常出色的。笔者在生产环境中,曾多次使用lua_
原创 2018-12-19 10:31:41
8997阅读
为了加快对AX表纪录的访问,可以把从数据库读取的纪录缓存内存中,以减少对数据库的频繁读取提高性能。纪录缓存有两种,一是单条纪录缓存,二是集合缓存。集合缓存可以在设计时将表的的CacheLookup属性设为EntireTable来实现,全表缓存在服务器端,为所有连接共享,客户端在访问表时先查找自己的缓存,再到服务器上查找全表缓存。全表缓冲是分公司创建的,如果SELECT操作来自于不同公司,服务器会
转载 2024-02-22 21:10:04
59阅读
1、缓存的基础概念1、为什么可以使用缓存:程序的运行具有局部性特征时间局部性:一个数据被访问过之后,可能很快会被再次访问到。空间局部性:一个数据被访问时,其周边的数据也有可能被访问到。(可以预加载周边数据到缓存)热区:局部性。例如,一个电商站点,可能其中20%的商品承载了80%的访问量,这20%中又可能是其中的20%是热区。2、缓存时效性缓存空间耗尽:LRU(最近最少使用)。缓存过期:缓存清理。3
缓存池基本写法--------------------------------- -- Lua Class对象池 -- 自己管理好池的清空时机 --------------------------------- ObjectPool = Class( "ObjectPool" ); -- 构造函数,传需实例化的对象 function ObjectPool:Ctor( class ) se
转载 2024-04-13 12:47:05
35阅读
1 //父子节点相关的: 2 parent 变量表示Transform的父节点 3 root 表示它的根节点,如果没有父节点,它会返回自己 4 //根据名字查找子节点 5 Transform Find(string name) 6 //判断该Transform是否某Transform的子节点 7 bool IsChildOf(Transform node) 8 //
# 如何实现“redis缓存lua” ## 概述 在这篇文章中,我将教你如何使用Lua脚本和Redis实现缓存操作。首先,我会给出整个流程的步骤,并用表格展示,然后详细说明每一步需要做什么,包括需要使用的代码和注释。 ## 流程图 ```mermaid flowchart TD A(开始) --> B(连接Redis) B --> C(编写Lua脚本) C --> D(
原创 2024-04-02 06:14:24
48阅读
# 使用 `stringRedisTemplate` 实现 Lua 缓存的详细指南 ## 介绍 在现代开发中,缓存是提升应用性能的关键技术之一。而 Redis,作为一个高性能的缓存数据库,通过 `Lua` 脚本增强了操作的原子性。本文将逐步指导你如何使用 `stringRedisTemplate` 来实现 Lua 缓存。 ## 流程步骤 首先,我们来概述整个实现流程: | 步骤 | 描述
原创 2024-09-28 06:15:33
45阅读
LRU原理:LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。实现:最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3. 当链表满
LRU 是 Least Recently Used 的缩写,即最近最少使用。作为一种经典的缓存策略,它的基本思想是长期不被使用的数据,在未来被用到的几率也不大,所以当新的数据进来时我们可以优先把这些数据替换掉。一、基本要求固定大小:限制内存使用。快速访问:缓存插入和查找操作应该很快,最好是 O(1) 时间。在达到内存限制的情况下替换条目:缓存应该具有有效的算法来在内存已满时驱逐条目。二、数据结构下
  • 1
  • 2
  • 3
  • 4
  • 5