2010-03-25
Google App Engine のインスタンス生存時間
Google App Engine では負荷の状況によってインスタンスの数を自動的に調整してくれるわけですが、数秒アイドルしただけでインスタンスが落とされるのか、数分程度は許されるのか、興味があるところです。
ということで、GAE/J のインスタンスがどの程度保持されるかの簡単な実験をしてみました。
(詳細は付録に参照のこと)
実行結果
| アクセス | インスタンスの状態 |
|---|---|
| 初回 | 初期インスタンス生成 |
| 10秒後 | 初期インスタンスのまま |
| 20秒後 | 初期インスタンスのまま |
| 30秒後 | 初期インスタンスのまま |
| 40秒後 | 初期インスタンスのまま |
| 50秒後 | 初期インスタンスのまま |
| 60秒後 | 初期インスタンスのまま |
| 2分後 | 初期インスタンスのまま |
| 3分後 | 初期インスタンスのまま |
| 4分後 | 初期インスタンスのまま |
| 5分後 | 新規インスタンス生成 |
| 10分後 | 新規インスタンス生成 |
上記の結果から、5分という時間が怪しいですね。
ということで、最終アクセスから4分50秒後と5分10秒後のアクセスを何度か試行してみました。
実行結果
| アクセス | インスタンスの状態 |
|---|---|
| 初回 | 初期インスタンス生成 |
| 4分50秒後(1回目) | 初期インスタンスのまま |
| 5分10秒後(1回目) | 新規インスタンス生成 |
| 4分50秒後(2回目) | 新規インスタンス生成 |
| 5分10秒後(2回目) | 新規インスタンス生成 |
| 4分50秒後(3回目) | 初期インスタンスのまま |
| 5分10秒後(3回目) | 新規インスタンス生成 |
微妙な結果になりました。
1回だけですが、最終アクセスから4分50秒後のアクセスでも新規にインスタンスが生成されています。
最終アクセスからインスタンスがシャットダウンされるまでの時間は5分前後かつあまり厳密ではないということでしょうか。
ということで、今度は最終アクセスから4分後と6分秒後のアクセスを10回ずつ試行してみました。
実行結果(4分後)
| アクセス | インスタンスの状態 |
|---|---|
| 4分後(1回目) | 初期インスタンスのまま |
| 4分後(2回目) | 初期インスタンスのまま |
| 4分後(3回目) | 初期インスタンスのまま |
| 4分後(4回目) | 初期インスタンスのまま |
| 4分後(5回目) | 新規インスタンス生成 |
| 4分後(6回目) | 初期インスタンスのまま |
| 4分後(7回目) | 初期インスタンスのまま |
| 4分後(8回目) | 初期インスタンスのまま |
| 4分後(9回目) | 初期インスタンスのまま |
| 4分後(10回目) | 初期インスタンスのまま |
実行結果(6分後)
| 6分後(1回目) | 初期インスタンスのまま |
| 6分後(2回目) | 新規インスタンス生成 |
| 6分後(3回目) | 新規インスタンス生成 |
| 6分後(4回目) | 新規インスタンス生成 |
| 6分後(5回目) | 新規インスタンス生成 |
| 6分後(6回目) | 新規インスタンス生成 |
| 6分後(7回目) | 新規インスタンス生成 |
| 6分後(8回目) | 新規インスタンス生成 |
| 6分後(9回目) | 初期インスタンスのまま |
| 6分後(10回目) | 初期インスタンスのまま |
これまた、微妙な結果ですね、、、。
最終アクセス時刻から約4分後の場合と約6分後の場合で、新規インスタンス生成の頻度に明らかな差が出たということは言えると思います。
上記までのデータから言えることは、『約5分間アクセスがないインスタンスはシャットダウンされる可能性が高い』ということでしょうか、、、。
付録
GoogleAppEngine 側の Servlet
public class Initialize_testServlet extends HttpServlet {
private static final Date initDate = new Date();
private static String initialDateStr = new SimpleDateFormat("yyyyMMdd hh:mm:ss.SSS").format(initDate);
private static int count = 1;
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
Date currentDate = new Date();
String currentDateStr = new SimpleDateFormat("yyyyMMdd hh:mm:ss.SSS").format(currentDate);
long uptime = currentDate.getTime() - initDate.getTime();
resp.setContentType("text/plain");
resp.getWriter().println("Initial Date = " + initialDateStr + "\nCurrent Date = " + currentDateStr + "\nuptime = " + uptime + "\ncount = " + (count++));
}
}
呼び出し側の groovy スクリプト1
int[] intervals = [0, 10, 20, 30, 40, 50, 60, 120, 180, 240, 300, 600]
intervals.each{
sleep(it * 1000);
println(new URL("http://<application-id>.appspot.com/initialize_test").text)
}
実行結果1
Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:10:04.737 uptime = 1 count = 1 Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:10:16.141 uptime = 11405 count = 2 Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:10:36.676 uptime = 31940 count = 3 Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:11:07.177 uptime = 62441 count = 4 Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:11:48.297 uptime = 103561 count = 5 Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:12:39.432 uptime = 154696 count = 6 Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:13:40.550 uptime = 215814 count = 7 Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:15:42.093 uptime = 337357 count = 8 Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:18:42.732 uptime = 517996 count = 9 Initial Date = 20100324 01:10:04.736 Current Date = 20100324 01:22:43.184 uptime = 758448 count = 10 Initial Date = 20100324 01:27:45.387 Current Date = 20100324 01:27:45.388 uptime = 1 count = 1 Initial Date = 20100324 01:37:47.074 Current Date = 20100324 01:37:47.075 uptime = 1 count = 1
呼び出し側の groovy スクリプト2
int[] intervals = [0, 290, 310, 290, 310, 290, 310]
intervals.each{
sleep(it * 1000);
println(new URL("http://<application-id>.appspot.com/initialize_test").text)
}
実行結果2
Initial Date = 20100324 01:45:59.017 Current Date = 20100324 01:45:59.018 uptime = 1 count = 1 Initial Date = 20100324 01:45:59.017 Current Date = 20100324 01:50:49.644 uptime = 290627 count = 2 Initial Date = 20100324 01:56:02.002 Current Date = 20100324 01:56:02.003 uptime = 1 count = 1 Initial Date = 20100324 02:00:53.746 Current Date = 20100324 02:00:53.748 uptime = 2 count = 1 Initial Date = 20100324 02:06:06.200 Current Date = 20100324 02:06:06.200 uptime = 0 count = 1 Initial Date = 20100324 02:06:06.200 Current Date = 20100324 02:10:57.901 uptime = 291701 count = 2 Initial Date = 20100324 02:16:09.484 Current Date = 20100324 02:16:09.485 uptime = 1 count = 1
呼び出し側の groovy スクリプト2
int[] intervals = [0, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 360, 360, 360, 360, 360, 360, 360, 360, 360, 360]
intervals.each{
sleep(it * 1000);
println(new URL("http://<application-id>.appspot.com/initialize_test").text)
}
実行結果3
Initial Date = 20100324 04:24:52.316 Current Date = 20100324 04:24:52.317 uptime = 1 count = 1 Initial Date = 20100324 04:24:52.316 Current Date = 20100324 04:28:54.485 uptime = 242169 count = 2 Initial Date = 20100324 04:24:52.316 Current Date = 20100324 04:32:55.286 uptime = 482970 count = 3 Initial Date = 20100324 04:24:52.316 Current Date = 20100324 04:36:55.806 uptime = 723490 count = 4 Initial Date = 20100324 04:24:52.316 Current Date = 20100324 04:40:57.665 uptime = 965349 count = 5 Initial Date = 20100324 04:45:01.927 Current Date = 20100324 04:45:01.928 uptime = 1 count = 1 Initial Date = 20100324 04:45:01.927 Current Date = 20100324 04:49:04.288 uptime = 242361 count = 2 Initial Date = 20100324 04:45:01.927 Current Date = 20100324 04:53:06.267 uptime = 484340 count = 3 Initial Date = 20100324 04:45:01.927 Current Date = 20100324 04:57:08.374 uptime = 726447 count = 4 Initial Date = 20100324 04:45:01.927 Current Date = 20100324 05:01:11.439 uptime = 969512 count = 5 Initial Date = 20100324 04:45:01.927 Current Date = 20100324 05:05:13.838 uptime = 1211911 count = 6 Initial Date = 20100324 04:45:01.927 Current Date = 20100324 05:11:16.103 uptime = 1574176 count = 7 Initial Date = 20100324 05:17:19.835 Current Date = 20100324 05:17:19.836 uptime = 1 count = 1 Initial Date = 20100324 05:23:24.557 Current Date = 20100324 05:23:24.559 uptime = 2 count = 1 Initial Date = 20100324 05:23:24.557 Current Date = 20100324 05:29:26.754 uptime = 362197 count = 2 Initial Date = 20100324 05:35:30.020 Current Date = 20100324 05:35:30.022 uptime = 2 count = 1 Initial Date = 20100324 05:41:32.569 Current Date = 20100324 05:41:32.570 uptime = 1 count = 1 Initial Date = 20100324 05:47:36.381 Current Date = 20100324 05:47:36.382 uptime = 1 count = 1 Initial Date = 20100324 05:53:38.953 Current Date = 20100324 05:53:38.954 uptime = 1 count = 1 Initial Date = 20100324 05:53:38.953 Current Date = 20100324 05:59:41.886 uptime = 362933 count = 2 Initial Date = 20100324 05:53:38.953 Current Date = 20100324 06:05:43.462 uptime = 724509 count = 3
トラックバック - http://d.hatena.ne.jp/beyondseeker/20100325/1269456609
リンク元
- 150 http://pipes.yahoo.com/pipes/pipe.info?_id=45d5a8c4e92dd6d0ea2937e5cbb455bf
- 20 http://www.google.co.jp/url?sa=t&rct=j&q=gae インスタンス&source=web&cd=7&ved=0CEgQFjAG&url=http://d.hatena.ne.jp/beyondseeker/20100325/1269456609&ei=6u6jTqDTBOPemAXn1JGaCQ&usg=AFQjCNHsVXO-Hu-oTFs9TR
- 20 http://www.google.co.jp/url?sa=t&rct=j&q=google app engine インスタンス&source=web&cd=4&ved=0CEoQFjAD&url=http://d.hatena.ne.jp/beyondseeker/20100325/1269456609&ei=2zGyTrOeHeX-mAXrsK2RAg&usg=AFQj
- 17 http://www.google.co.jp/url?sa=t&rct=j&q=インスタンス 時間&source=web&cd=1&ved=0CCoQFjAA&url=http://d.hatena.ne.jp/beyondseeker/20100325/1269456609&ctbs=lr:lang_1ja&ei=hUylTubmD
- 10 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=google+app+engine+インスタンス&qscrl=1
- 9 http://search.yahoo.co.jp/search?p=holy+crap&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
- 9 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http://d.hatena.ne.jp/beyondseeker/20100325/1269456609&rct=j&q=インスタンス時間&ei=M-vPTaT1B4ryvQO4z-n6Cg&usg=AFQjCNHsVX
- 8 http://www.google.co.jp/search?q=gae+インスタンス 生存&btnG=検索&hl=ja&biw=1078&bih=690&sa=2
- 8 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=gae+インスタンス 生成 時間
- 7 http://www.google.co.jp/search?hl=ja&q=google+app+engine+インスタンス 生存&btnG=検索&aq=f&aqi=&aql=&oq=&gs_rfai=




