Merge ~hyask/autopkgtest-cloud:skia/close_channels into autopkgtest-cloud:master

Proposed by Skia
Status: Merged
Merged at revision: 8f326e78896742cae6c4ba58dcf96d471be56b9e
Proposed branch: ~hyask/autopkgtest-cloud:skia/close_channels
Merge into: autopkgtest-cloud:master
Diff against target: 96 lines (+35/-32)
2 files modified
charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/worker/worker (+3/-0)
charms/focal/autopkgtest-web/webcontrol/download-results (+32/-32)
Reviewer Review Type Date Requested Status
Brian Murray Approve
Review via email: mp+468265@code.launchpad.net

Description of the change

We hit a situation where RabbitMQ hit its `memory alarm` of 3GB (https://www.rabbitmq.com/docs/memory). Investigation showed a huge number of channels (+65k). Closing those two worker channels seems to stabilize the situation to around 1350 opened channels and 700MB of RAM, but we're not running at full capacity right now.

More channel closing might be required elsewhere, but those three are already a very good start.

EDIT after a night:
The closing of the additional channel in `download-results` stabilized the situation at about 900 opened channels.

EDIT after an additional day:
The situation seems to keep stable. I'm now opening this MP for review.

To post a comment you must log in.
Revision history for this message
Brian Murray (brian-murray) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/worker/worker b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/worker/worker
index e9bc152..7354be2 100755
--- a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/worker/worker
+++ b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/worker/worker
@@ -603,6 +603,8 @@ def call_autopkgtest(
603 private,603 private,
604 )604 )
605605
606 status_amqp.close()
607
606 return ret608 return ret
607609
608610
@@ -1583,6 +1585,7 @@ def request(msg):
1583 complete_amqp.basic_publish(1585 complete_amqp.basic_publish(
1584 amqp.Message(complete_msg, delivery_mode=2), complete_exchange_name, ""1586 amqp.Message(complete_msg, delivery_mode=2), complete_exchange_name, ""
1585 )1587 )
1588 complete_amqp.close()
15861589
1587 logging.info("Acknowledging request %s" % body)1590 logging.info("Acknowledging request %s" % body)
1588 msg.channel.basic_ack(msg.delivery_tag)1591 msg.channel.basic_ack(msg.delivery_tag)
diff --git a/charms/focal/autopkgtest-web/webcontrol/download-results b/charms/focal/autopkgtest-web/webcontrol/download-results
index 1297a66..2c4ea47 100755
--- a/charms/focal/autopkgtest-web/webcontrol/download-results
+++ b/charms/focal/autopkgtest-web/webcontrol/download-results
@@ -76,38 +76,38 @@ def process_message(msg):
76 while True:76 while True:
77 try:77 try:
78 # add to queue instead of writing to db78 # add to queue instead of writing to db
79 complete_amqp = amqp_con.channel()79 with amqp_con.channel() as complete_amqp:
80 complete_amqp.access_request(80 complete_amqp.access_request(
81 "/complete", active=True, read=False, write=True81 "/complete", active=True, read=False, write=True
82 )82 )
83 complete_amqp.exchange_declare(83 complete_amqp.exchange_declare(
84 SqliteWriterConfig.writer_exchange_name,84 SqliteWriterConfig.writer_exchange_name,
85 "fanout",85 "fanout",
86 durable=True,86 durable=True,
87 auto_delete=False,87 auto_delete=False,
88 )88 )
89 write_me_msg = {89 write_me_msg = {
90 "run_id": run_id,90 "run_id": run_id,
91 "version": version,91 "version": version,
92 "triggers": triggers,92 "triggers": triggers,
93 "duration": duration,93 "duration": duration,
94 "exitcode": exitcode,94 "exitcode": exitcode,
95 "requester": requester,95 "requester": requester,
96 "env": info.get("env", ""),96 "env": info.get("env", ""),
97 "uuid": test_uuid,97 "uuid": test_uuid,
98 "release": release,98 "release": release,
99 "arch": arch,99 "arch": arch,
100 "package": package,100 "package": package,
101 }101 }
102 complete_amqp.basic_publish(102 complete_amqp.basic_publish(
103 amqp.Message(json.dumps(write_me_msg), delivery_mode=2),103 amqp.Message(json.dumps(write_me_msg), delivery_mode=2),
104 SqliteWriterConfig.writer_exchange_name,104 SqliteWriterConfig.writer_exchange_name,
105 "",105 "",
106 )106 )
107107
108 msg.channel.basic_ack(msg.delivery_tag)108 msg.channel.basic_ack(msg.delivery_tag)
109 return109 return
110 except Exception as _:110 except Exception:
111 time.sleep(3)111 time.sleep(3)
112 now = datetime.datetime.now()112 now = datetime.datetime.now()
113 if (113 if (

Subscribers

People subscribed via source and target branches

to all changes: