redis 服务器 v2.8.4 在 Ubuntu 14.04 VPS 上运行,具有 8 GB RAM 和 16 GB 交换空间(在 SSD 上)。但是htop显示redis单独占用22.4 G内存!
redis-server最终因为内存不足而崩溃。Mem并且Swp两者都命中 100% 然后redis-server与其他服务一起被杀死。
来自dmesg:
[165578.047682] Out of memory: Kill process 10155 (redis-server) score 834 or sacrifice child
[165578.047896] Killed process 10155 (redis-server) total-vm:31038376kB, anon-rss:5636092kB, file-rss:0kB
Run Code Online (Sandbox Code Playgroud)
redis-server从 OOM 崩溃或service redis-server force-reload导致内存使用量下降到 <100MB 的情况下重新启动。
问题:为什么会redis-server占用越来越多的内存直到崩溃?我们怎样才能防止这种情况发生?
设置是不是真的maxmemory不行,因为一旦redis达到maxmemory限制,它就会开始删除数据?

重启 redis-server 后 …
在谷歌搜索时,我发现了一些相互矛盾的信息。
某些站点指出,当没有为数据留下物理内存时,SQL Server 会将现有数据移动到 TEMPDB(请参阅:SQL Server:揭秘 TempDb 和建议)。
但是其他站点声明,当没有足够的物理内存时,操作系统可以使用 PAGE FILE 并将数据从物理内存移到它(请参阅SQL Server 的页面文件)。
我想知道当 SQL Server 物理内存不足时,它会在哪里写入数据?到 tempdb 还是到 OS Page 文件?或者两者都有?
任何配置错误是否会导致 mysql..mysql 调谐器显示创建过多的临时表
Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk
table_open_cache = 125 tables
table_definition_cache = 256 tables
You have a total of 97 tables
You have 125 open tables.
Current table_cache hit rate is 3%
Run Code Online (Sandbox Code Playgroud)
早期的临时表是“在 23725 个临时表中 38% 是在磁盘上创建的”,但我将 max_heap 和 tmp_table 从 16m 更改为 200m 并降低到 30%。
配置:
engine myisam
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = …Run Code Online (Sandbox Code Playgroud) 使用 SQL Server 2005,您可以查看任务管理器,至少可以粗略地查看分配给 SQL Server 的内存量。
在 SQL Server 2008 中,工作集或提交大小从未真正超过 500 MB,即使 SQLServer:Memory Manager/Total Server Memory (KB) perf 计数器指出 16,732,760。
是否有设置可以在任务管理器中实际显示服务器内存?或者是因为他们改变了 SQL Server 中内存的使用方式
我一直在执行一种密集的模式删除和通过 PostgreSQL 服务器创建,但现在抱怨..:
WARNING: out of shared memory
ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
Run Code Online (Sandbox Code Playgroud)
但是如果 PostgreSQL 只是用 重新启动,问题仍然存在service postgresql restart,我怀疑 max_locks_per_transaction 不会调整任何内容。
我有点疏远,因为此错误的故障排除列表对我不起作用。
更多信息 1409291350:缺少一些细节,但我保留了核心 SQL 结果。
postgres=# SELECT version();
PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2,
64-bit
Run Code Online (Sandbox Code Playgroud)
和:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
Run Code Online (Sandbox Code Playgroud) CACHESTORE_SQLCP Sql 计划在几天后占用 > 38 GB。
我们已经在运行“优化临时工作负载”选项。(实体框架和自定义报告创建了很多临时!)
具有多可用区镜像的 AWS RDS 上的 SQL Server 2016 SE 3.00.2164.0.v1
当我运行时:
DBCC FREESYSTEMCACHE('SQL Plans');
Run Code Online (Sandbox Code Playgroud)
或者
DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)
或者
DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL
Run Code Online (Sandbox Code Playgroud)
或者
DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;
Run Code Online (Sandbox Code Playgroud)
它似乎没有清除它:
SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb desc
type name pages_kb
CACHESTORE_SQLCP SQL Plans 38321048
Run Code Online (Sandbox Code Playgroud)
我在启用查询存储的情况下运行,但我禁用了它以查看是否有任何干扰,它似乎没有帮助,但我将其关闭。
真正奇怪的是
SELECT COUNT(*) FROM sys.dm_exec_cached_plans
Run Code Online (Sandbox Code Playgroud)
是 1-3 左右(它似乎只显示显示当前正在运行的查询),即使所有内存都已保留,甚至在我尝试清除任何内容之前。我错过了什么?
CACHESTORE_SQLCP 占用了所有可用内存的 60% 以上,这是一个问题,因为偶尔会发生内存等待。此外,我们不得不在周末终止一个持续 4 小时的例行 DBCC CHECKDB,因为内存不足导致等待(它立即完成,没有错误,打开 PHYSICAL_ONLY)。
有没有办法回收这些内存(除了每晚重启!?)?
当我跑
SELECT * FROM …Run Code Online (Sandbox Code Playgroud) 我如何在生产框中检查我的 SQL 服务器的内存使用情况。我正在使用 SQL Server 2016。当我检查任务管理器时,它显示在 90% 以上。我不认为这是 sql server 的真实内存使用情况。
我有一个 SQL 性能工具 grafana,它显示的 CPU 使用率比我在任务管理器中看到的少得多。我检查了资源监视器,可以看到平均 CPU 值。我对 SQL 服务器内存使用情况感到困惑。我正在尝试确定内存压力是否是我的某些问题的一个问题。
有人可以直接给出一个好的/正确的解释。
有没有办法找出 SQL Server 2008 R2 中缓存的内容?我发现了以下不错的文章:http : //blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache。但是,我想知道每个表和索引存储了多少数据(例如百分比和 KB)。有没有一些简单的方法来获取这些数据?
我在 MySQL 中使用递归存储过程来生成一个名为 的临时表id_list,但我必须在后续选择查询中使用该过程的结果,所以我不能DROP在过程中使用临时表...
BEGIN;
/* generates the temporary table of ID's */
CALL fetch_inheritance_groups('abc123',0);
/* uses the results of the stored procedure in the WHERE */
SELECT a.User_ID
FROM usr_relationships r
INNER JOIN usr_accts a ON a.User_ID = r.User_ID
WHERE r.Group_ID = 'abc123' OR r.Group_ID IN (SELECT * FROM id_list)
GROUP BY r.User_ID;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
调用过程时,第一个值是我想要的分支的顶部 ID,第二个值是tier过程在递归过程中使用的ID 。在递归循环之前,它会检查tier = 0它是否运行以及是否运行:
DROP TEMPORARY TABLE IF EXISTS id_list;
CREATE TEMPORARY TABLE IF NOT EXISTS …Run Code Online (Sandbox Code Playgroud) 我有 SQL Server 2014,最大内存设置为 6GB(物理内存为 8GB)。
在目标服务器内存为6GB,有时,然后回落到总的服务器内存(约5.3GB,从未达到6GB)。我用committed_kb在sys.dm_os_sys_info检查SQL Server所使用的内存。
当我监视sys.dm_os_buffer_descriptors 时,我看到页面已从缓存中删除 - 但仍有 700MB 的内存。如果不需要内存,您如何解释从缓存中删除页面的事实?我希望 SQL Server 仅在需要内存时删除页面。
解除分配的临时表在此服务器上不是问题。我的 PLE 是 3632。过程缓存是 2182 MB。
我希望只有在没有剩余内存时才会删除页面,但是我有 700MB 可用空间还是我误解了这一点?
有人可以尝试解释这种行为吗?
SQL Server 也在从磁盘读取,所以我想我可能会得出结论,并非所有需要的页面都在内存中。
我做了一些更多的研究,我将大量页面从磁盘读取到内存中,并在读取过程中注意到任务管理器中的一些内容:
就像 Windows 不允许sqlservr.exe增长到 6GB 一样。
我运行了 Shanky 提供的查询:
select
(physical_memory_in_use_kb/1024) Physical_Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(Virtual_address_committed_kb/1024 )Total_Memory_in_MB,--RAM+ …Run Code Online (Sandbox Code Playgroud) memory ×10
sql-server ×6
mysql ×2
performance ×2
amazon-rds ×1
buffer-pool ×1
cache ×1
data-pages ×1
innodb ×1
myisam ×1
nosql ×1
optimization ×1
postgresql ×1
redis ×1
schema ×1
tempdb ×1
ubuntu ×1