taosdata / TDengine

High-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios
https://tdengine.com
GNU Affero General Public License v3.0
23.34k stars 4.85k forks source link

Is it normal taosd uses 22GB memory? #4275

Closed quchunhui closed 3 years ago

quchunhui commented 3 years ago

在项目服务器上搭建了TDengine集群(3个节点,centos8,每个节点8核64GB内存),集群采用的3副本, 为了模拟3年的数据来验证查询性能,写了一个批量写入的程序,程序地址 https://github.com/quchunhui/java-demo/blob/master/tdengine/src/main/java/com/rexel/tdengine/api/MockData.java 由于需要模拟3年的数据,采用了多线程的方式写入,每个线程负责1个月的数据,共36个线程同时写入。 此时用systemctl status taosd查看状态,发现taosd占用了20多个G的内存,请问这个内存大小是否正常? 是否可以设置这个内存的上限?担心占用太多,影响其他组件的运行,集群中还有消息队列,Flink,Yarn等大数据组件在运行。

taod截图 image 数据库截图 image

stephenkgu commented 3 years ago

alter database stress_test blocks 12; & restart taosd to make the new blocks configuration take effect.

可以把blocks改小来降低内存使用,新数值最好为3的倍数。

quchunhui commented 3 years ago

更正一下,我的电脑配置是64G,目前taod已经用到54个G了, 数据库的block数16,cache16MB,请问,这个54G都用在了什么地方?是如何计算的?还望解答。 如果td自己就占用了这么多内存,对整个集群的影响太大了。 image image

stephenkgu commented 3 years ago

是develop最新的版本吗?最近内存相关的优化比较多。

更新之后,内存如果还比较高,就把blocks配置的小点,现在表的元数据是采用的全内存方式,这样查询会比较快,5000的表也不多。最好先更新下版本。

quchunhui commented 3 years ago

在新版本中测试,如果发现问题再重新起票