Google app engine 可能是Appengine上的金字塔内存泄漏灵活使用MemoryStore
我们正在努力将后端从appengine标准(和“webapp2”框架)迁移到灵活使用金字塔。我们有各种各样的概念证明,似乎没有很多问题。在这个早期阶段,它所做的只是接收来自第三方(“pings”)的请求,然后向另一个内部服务启动一个任务,以获取一些数据。它与谷歌MemoryStore连接以缓存一个用户id,表明我们已经在过去6小时内获取(或试图获取)了该用户的数据 说到6小时,似乎每隔6小时左右,Flexible实例上的内存使用量就会达到一个临界点,然后可能会刷新,一切都会恢复正常。该实例的内存设置为512MB,但与时钟一样,它的内存设置为800MB左右(某种宽限使用?或者不能设置为1GB以下) 很明显,它的移动是多么的缓慢,记忆并没有像应该的那样经常被清除。 发生这种情况时,实例上的延迟也会出现峰值 我不确定在调试这样的东西时什么有用,所以我将尝试展示我所能做的 Appengine YAML文件:Google app engine 可能是Appengine上的金字塔内存泄漏灵活使用MemoryStore,google-app-engine,pyramid,app-engine-flexible,google-cloud-memorystore,Google App Engine,Pyramid,App Engine Flexible,Google Cloud Memorystore,我们正在努力将后端从appengine标准(和“webapp2”框架)迁移到灵活使用金字塔。我们有各种各样的概念证明,似乎没有很多问题。在这个早期阶段,它所做的只是接收来自第三方(“pings”)的请求,然后向另一个内部服务启动一个任务,以获取一些数据。它与谷歌MemoryStore连接以缓存一个用户id,表明我们已经在过去6小时内获取(或试图获取)了该用户的数据 说到6小时,似乎每隔6小时左右,Flexible实例上的内存使用量就会达到一个临界点,然后可能会刷新,一切都会恢复正常。该实例的内存
runtime: custom
env: flex
service: ping
runtime_config:
python_version: 3.7
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
Dockerfile(根据自定义运行时需要)
为什么是习俗?在默认的Python运行时下,我无法使其正常工作。pip安装-e.
似乎是需要的
然后,在root\uuuu init\uuuu
中,我有:
from pyramid.config import Configurator
from externalping.memcache import CacheStore
cachestore = CacheStore()
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
with Configurator(settings=settings) as config:
config.include('.routes')
config.scan()
return config.make_wsgi_app()
也许这么早就定义了与MemoryStore的连接是个问题?缓存存储:
class CacheStore(object):
redis_host = os.environ.get('REDISHOST', 'localhost')
redis_port = int(os.environ.get('REDISPORT', 6379))
client = None
def __init__(self):
self.client = redis.StrictRedis(host=self.redis_host, port=self.redis_port)
def set_json(self, key, value):
self.client.set(key, json.dumps(value))
return True
def get_json(self, key):
return json.loads(self.client.get(key))
在实际请求本身上,从外部导入导入缓存存储后,我只需调用上面显示的方法:cachestore.client.get(user['ownerId'])
正如我所能说的那样,这似乎是谷歌为实现这一点所说的。唯一的区别是我在它周围放了一个包装器。这些模式建议每6小时重新启动或刷新一次资源。您是否检查了相应的日志?也许您需要添加一些日志记录?能否添加在内存图突然减少的时间戳处发生的日志?现在很难说是什么原因导致了这些问题。相信我已经将其与云任务联系在一起,并在这里产生了一个问题
class CacheStore(object):
redis_host = os.environ.get('REDISHOST', 'localhost')
redis_port = int(os.environ.get('REDISPORT', 6379))
client = None
def __init__(self):
self.client = redis.StrictRedis(host=self.redis_host, port=self.redis_port)
def set_json(self, key, value):
self.client.set(key, json.dumps(value))
return True
def get_json(self, key):
return json.loads(self.client.get(key))