带有Flask服务器的Docker容器在大约20个请求后停止响应

时间:2017-02-13 21:20:40

标签: python docker flask tensorflow flask-restful

我有一个docker容器,它接收图像的URL,使用urllib2将图像下载到内存,使用Tensorflow对其进行一些处理,然后返回JSON数据。

代码结构如下:

myapp.py

from flask import Flask
from flask_restful import reqparse, abort, Api, Resource, inputs
import my_tensorflow
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('url')
class MyApp(Resource):
  def post(self):
    c = my_tensorflow.MyTensorflow(args['url'])
        c.create_graph()
        returned = c.run_inference_on_image()
        return {'results': returned}
api.add_resource(MyApp, '/myapp')
if __name__ == '__main__':
   port = int(os.environ.get('PORT', 5000))
   app.run(host='0.0.0.0', port=port)

my_tensorflow.py

import numpy as np
import tensorflow as tf
import urllib2

class MyTensorflow:

  def __init__(self, url):
     self.imageUrl = imageUrl

  def create_graph(self):
    with tf.gfile.FastGFile("/path/to/model.pb", 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        _ = tf.import_graph_def(graph_def, name='')

   def run_inference_on_image(self):
     image_string = urllib2.urlopen(self.imageUrl).read()
     with tf.Session() as sess:
       ...
       ...
       return a_text_value

容器适用于大约20个请求。大约20个请求后,它停止响应,只响应“内部服务器错误”。我似乎无法解决这个问题。我在我的代码中放入了打印语句,以查看它在哪些地方没有响应或出错,但是docker logs

中没有出现任何打印语句

docker logs没有显示任何有趣的内容。以下是它的内容:

172.17.42.1 - - [13/Feb/2017 21:12:02] "POST /myapp HTTP/1.1" 500 -

当容器无响应时(以internal server error回复),docker stats会返回此信息:

CONTAINER                  CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
docker_container   0.01%               2.475 GB/8.255 GB   29.99%              5.328 MB/2.036 MB

使用docker restart重新启动容器后,一切都会重新开始。

我不确定会出现什么问题以及如何解决问题?

0 个答案:

没有答案