gunicorn工人退出每个请求

时间:2017-11-02 02:35:12

标签: python gunicorn airflow apache-airflow

我有一个apache-airflow 1.8.2的全新安装,启动了它的网络服务器,它的gunicorn工作人员退出每个网页请求,让请求在等待新工人生成时大约持续30秒。需要帮助解决此问题。

以下详细信息

我已安装apache-airflow 1.8.2并关注this guide。我在端口8081启动了网络服务器。

现在,当我使用浏览器访问服务器时,响应非常慢。我查看了控制台输出,并注意到每次我加载一个网页时,它都会显示"工人现有",然后暂停很长时间并说'#34;引导工人"。

在挖掘源代码后,我发现这些是枪手。我没有使用gunicorn或airflow或Flask的经验,所以我不知道这是否是预期的行为,但我觉得它不应该。每个网页至少有一个网络服务器不应该挂半分钟。

控制台输出:

---> Browser request
[2017-11-01 19:08:07 -0700] [14549] [INFO] Worker exiting (pid: 14549)
---> Hangs for 30s
[2017-11-01 19:08:37 -0700] [13316] [INFO] Handling signal: ttin
[2017-11-01 19:08:37 -0700] [14698] [INFO] Booting worker with pid: 14698
/Users/michael/Programs/clones/airflow/airflow/www/app.py:23: FlaskWTFDeprecationWarning: "flask_wtf.CsrfProtect" has been renamed to "CSRFProtect" and will be removed in 1.0.
  csrf = CsrfProtect()
/Users/michael/Programs/miaozhen/tests/airflow-test/lib/python3.6/site-packages/flask/exthook.py:71: ExtDeprecationWarning: Importing flask.ext.cache is deprecated, use flask_cache instead.
  .format(x=modname), ExtDeprecationWarning
127.0.0.1 - - [01/Nov/2017:19:08:37 -0700] "GET /admin/ HTTP/1.1" 200 95063 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
[2017-11-01 19:08:38,096] [14698] {models.py:168} INFO - Filling up the DagBag from /Users/michael/airflow/dags
---> other GET requests on the same webpage, skipped here for simplicity
[2017-11-01 19:08:39 -0700] [13316] [INFO] Handling signal: ttou

现在,我正在apache-airflow 1.8.2中运行pip install -e .的源版本(即克隆源代码,签出代码并使用virtualenv安装)。不过我也尝试过:在没有pip install apache-airflow的情况下运行pypi版本(virtualenv);运行没有virtualenv的源版本。并且所有安装都存在同样的问题,因此这些差异无关紧要。

我的Python安装是:

$ python -VV
Python 3.6.3 (default, Oct  4 2017, 06:09:38) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.37)]

编辑:

我试过安装&在另一台机器上运行apache-airflow(Ubuntu Linux 16.04 + Python 3.5),没有问题。我还问过使用Python 3.6在Mac上的另一个人,也没有问题。我想我的机器有些奇怪...有什么建议我可以调试这个东西吗?

3 个答案:

答案 0 :(得分:3)

工人经常有意地退出信号JSONObject jsonObject = new JSONObject(); try { jsonObject.put("book_name", "English"); JSONArray array = new JSONArray(); // you can create multiple jsonObject and then add it to jsonArray array.put(jsonObject); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("books", array.toString()); editor.apply(); // now get array of objects from shared Pref. String data =fetchAllPreference(); JSONArray fetchedData = new JSONArray(data); for(int i=0;i<fetchedData.length();i++) { TextView iv = new TextView(this); LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(200,200); layoutParams.setMargins(10,10,0,0); iv.setLayoutParams(layoutParams); // put id to everyview iv.setId(i); iv.setText(fetchedData.getJSONObject(i).getString("book_name")); gallery.addView(iv); } } catch (JSONException e) { e.printStackTrace(); } (意为decrement # of processes by one)。这是气流定期“刷新”的工人。根据我在AIRFLOW-276中读到的添加了此功能的内容,刷新工作人员将确保他们获取新的或更新的DAG。可以在ttouworker_refresh_interval下的气流配置中修改此行为。

通过查看source,它会在拆除旧工人之前调动新员工,因此我认为这不会导致您的请求延迟。但是,您可以尝试使用worker_refresh_batch_size停用它。

答案 1 :(得分:0)

好的,调试完源代码后我设法解决了问题,但它与gunicorn无关。

问题是this

UUID

我认为问题应该关闭,因为它现在无效,但我不知道该怎么做。

答案 2 :(得分:0)

我遇到了与气流1.10.1相同的问题,WUI非常无响应,而且可以肯定的是,对socker.getfqdn()的呼叫花费了10秒的时间。

我在较旧版本的Docker中运行,众所周知,当容器尝试通过DNS解析其自身地址时,会遇到问题。

作为一种解决方法,我将hostname_callable中的配置值airflow.cfg更改为socket:gethostname,并且WUI被证明是响应式的。

这确实意味着所有日志中使用的主机名将是本地主机名(即运行hostname时得到的主机名)。