質問編集履歴

1

体裁の訂正

2020/04/29 17:24

投稿

arcbeatle
arcbeatle

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
- ### 前提・実現したいこと
1
+ ### やりたいこと
2
2
 
3
- pythonAPIサーバを構築したく、以下の環境を組みした
3
+ 以下環境で、pythonAPIサーバを構築したいと思ってい
4
4
 
5
5
  - ubutnu 18.04
6
6
 
@@ -12,17 +12,31 @@
12
12
 
13
13
 
14
14
 
15
- 動作イメージとしては、apacheでAPIサーバのプロセス常時ホスティングし
15
+ イメージとしては、pythonプログラムをwebサーバ化するためのWSGIサーバにapache使い
16
16
 
17
- curlでリクエストすると、サーバから簡単な文字列を返却するようなものになります。
17
+ APIサーバとしてプロセスを常駐させておき、curlでhttpリクエストすると、簡単な文字列を返却する
18
18
 
19
- またAPIサーバはシングルプロセス、シングルスレッドでの動作想定しています。
19
+ ような形になりす。またAPIサーバはシングルプロセス、シングルスレッドを稼働前提としています。
20
20
 
21
21
 
22
22
 
23
+ ### 問題点
24
+
25
+ apacheでAPIサーバプロセスを起動、curlで文字列を得ることはできました。
26
+
27
+ 一方、psコマンドでプロセスを見てみると、APIサーバは**1プロセス4スレッド**で起動していました。
28
+
23
- 上記実現にあたり各ファイルを以下のように記述ました。
29
+ 内訳は1スレッドが親、3スレッドが子でした。
30
+
31
+ 設定ファイル(後述のtest.conf)で、WSGIDaemonProcessに「**threads=1**」を指定したのに、
32
+
33
+ なぜ複数スレッド立ち上がるのかが分からずにいます。これらは管理プロセスやプールプロセス
34
+
35
+ なのでしょうか?お手数ですがご教示いただけますと幸いです。
24
36
 
25
37
 
38
+
39
+ ### ファイル
26
40
 
27
41
  〜apache〜
28
42
 
@@ -36,7 +50,7 @@
36
50
 
37
51
  WSGIDaemonProcess testprocess user=user group=user threads=1
38
52
 
39
- WSGIScriptAlias / /home/user/app/test_wsgi.py
53
+ WSGIScriptAlias / /home/user/app/api.py
40
54
 
41
55
  <Directory /home/user/app>
42
56
 
@@ -58,7 +72,7 @@
58
72
 
59
73
  〜API〜
60
74
 
61
- ・/home/user/app/test_wsgi.py
75
+ ・/home/user/app/api.py
62
76
 
63
77
  ```python
64
78
 
@@ -82,41 +96,27 @@
82
96
 
83
97
 
84
98
 
85
-
86
-
87
- ### 発生している問題
88
-
89
- 想定通りapacheでpython APIサーバをホストし、リクエスト結果も得られたのですが、
90
-
91
- スレッド数に不可解な点がありました。htop等で起動中プロセスを見ると、当該サーバは
92
-
93
- 1プロセスで起動はできているものの、スレッドが4つ紐づいていました。
94
-
95
- また内訳を見ると、1スレッドが親、3スレッドが子でした。
96
-
97
-
98
-
99
99
  ### 試したこと
100
100
 
101
- 0. test_wsgi.pyにループ処理を仕込み負荷をかけたところ、子スレッド1つと親スレッド1つの
101
+ 0. **api.pyにループ処理を仕込み負荷をかける**
102
102
 
103
- CPU使用率が100%近くになった一方、他2スレッドはずっと0%でした。
103
+ →子スレッド1つと親スレッド1つのCPU使用率が100%、他2スレッドはずっと0%
104
104
 
105
105
  →残り2スレッドはプール?
106
106
 
107
107
 
108
108
 
109
- 0. mpm_event.conf(/etc/apache2/mods-available)を確認したところ、ThreadPerChildの
109
+ 0. **mpm_event.conf(/etc/apache2/mods-available)を確認**
110
110
 
111
- デフォルト値は25でした。また、www-dataユーザで実行されているapacheの他プロセス
111
+ →ThreadPerChildの値は25(default)
112
112
 
113
- デフォルト80ポートのサイト?)は、親スレッド1、子スレッド26でした。
113
+ →一方、psコマンドで見たwww-dataユーザで実行されているapacheの他プロセス(80ポートのデフォルトサイト?)は、親スレッド1、子スレッド26
114
114
 
115
- →子スレッドの数は、ThreadPerChildの値と一致しない?
115
+ →子スレッドの数ThreadPerChildの値ではない?
116
116
 
117
117
 
118
118
 
119
- 0. 試しにmpm_event.confを以下のように変更しました。
119
+ 0. **mpm_event.confを以下のように変更**
120
120
 
121
121
  StartServers 2 → 1
122
122
 
@@ -124,28 +124,32 @@
124
124
 
125
125
  MaxRequestWorkers 150 → 1
126
126
 
127
- APIサーバは状況変わらず、www-dataユーザのプロセスは親スレッド1、子スレッド2に変わりました
127
+ APIサーバは状況変わらず、www-dataユーザのプロセスは親スレッド1、子スレッド2に変
128
128
 
129
- →wsgiサーバには別の設定が必要?
129
+ →wsgiサーバには別の設定が必要?やはりプールスレッドがある?
130
130
 
131
131
 
132
132
 
133
- 0. mpm_eventを無効化、mpm_preforkを有効化しました。3)と同じく、影響を受けたのはwww-data
133
+ 0. **mpm_eventからmpm_preforkに切替**
134
134
 
135
- ユーザのプロセスだけでした。
135
+ →3)と同じく、影響を受けたのはwww-dataユーザのプロセスのみ
136
136
 
137
137
  →wsgiはmpmの設定の影響を受けない?
138
138
 
139
+ ※MPMは初めて触るのですが、シングルスレッドに限定するならば、本来はpreforkを使うべきなのかなと解釈しています。
139
140
 
140
141
 
141
- ### 補足
142
142
 
143
+ ### 補足画像
144
+
143
- - mpm_event.confを変更した時
145
+ ※USERがグレーの行がAPIサーバです。
146
+
147
+ - 試したこと3)の時
144
148
 
145
149
  ![イメージ説明](e33354839e7e74f7852a60df2b554939.jpeg)
146
150
 
147
151
 
148
152
 
149
- - preforkに変更した時
153
+ - したこと4)の
150
154
 
151
155
  ![イメージ説明](b0133a5d7229007b1549d0be46b310f7.jpeg)