我有一个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上的另一个人,也没有问题。我想我的机器有些奇怪...有什么建议我可以调试这个东西吗?
答案 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。可以在ttou
和worker_refresh_interval
下的气流配置中修改此行为。
通过查看source,它会在拆除旧工人之前调动新员工,因此我认为这不会导致您的请求延迟。但是,您可以尝试使用worker_refresh_batch_size
停用它。
答案 1 :(得分:0)
答案 2 :(得分:0)
我遇到了与气流1.10.1
相同的问题,WUI非常无响应,而且可以肯定的是,对socker.getfqdn()
的呼叫花费了10秒的时间。
我在较旧版本的Docker中运行,众所周知,当容器尝试通过DNS解析其自身地址时,会遇到问题。
作为一种解决方法,我将hostname_callable
中的配置值airflow.cfg
更改为socket:gethostname
,并且WUI被证明是响应式的。
这确实意味着所有日志中使用的主机名将是本地主机名(即运行hostname
时得到的主机名)。