From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.1 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id D21E11F55F; Sat, 30 Sep 2023 23:13:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yhbt.net; s=selector1; t=1696115600; bh=/wjRAHVltZSjcjSMGcaggQSKPqJww8y+UlJnCeqOZ7I=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=0QBSgrCeB2KU0sjOJ76fo/VPbonBEcaqRiheBq44LviMlO4ONI8/tzF3tWBMmPv4y 5D8tFREa274j/iZrPUGBUJbV9h8+czg3brxwz9+6q5lWhVO6Aa0ndwxMZPcmGCH8T2 EsIAmLFKWRN3gdnrfZoKaz7ZgKlffFMcR14CTZb8= Date: Sat, 30 Sep 2023 23:13:20 +0000 From: Eric Wong To: Jean Boussier Cc: raindrops-public@yhbt.net Subject: [PATCH] middleware: reuse inet_diag netlink socket Message-ID: <20230930231320.M781709@dcvr> References: <6E0E349D-A7CE-4B88-8F89-66438BB775A1@gmail.com> <20230926214000.M564322@dcvr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230926214000.M564322@dcvr> List-Id: > Your code (and some of the Ruby code shipped w/ raindrops) > should probably be reusing sockets given our API allows it. IOW, something like this (don't think test cases are worth updating): ------8<------- Subject: [PATCH] middleware: reuse inet_diag netlink socket No point in constantly allocating and deallocating FDs (and Ruby IO objects) when reusing them is supported. --- lib/raindrops/middleware.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/raindrops/middleware.rb b/lib/raindrops/middleware.rb index d5e3927..e0781f2 100644 --- a/lib/raindrops/middleware.rb +++ b/lib/raindrops/middleware.rb @@ -97,7 +97,9 @@ def initialize(app, opts = {}) if tmp.nil? && defined?(Unicorn) && Unicorn.respond_to?(:listener_names) tmp = Unicorn.listener_names end - @tcp = @unix = nil + @nl_sock = @tcp = @unix = nil + defined?(Raindrops::Linux.tcp_listener_stats) and + @nl_sock = Raindrops::InetDiagSocket.new if tmp @tcp = tmp.grep(/\A.+:\d+\z/) @@ -129,7 +131,7 @@ def stats_response # :nodoc: "writing: #{@stats.writing}\n" if defined?(Raindrops::Linux.tcp_listener_stats) - Raindrops::Linux.tcp_listener_stats(@tcp).each do |addr,stats| + Raindrops::Linux.tcp_listener_stats(@tcp, @nl_sock).each do |addr,stats| body << "#{addr} active: #{stats.active}\n" \ "#{addr} queued: #{stats.queued}\n" end if @tcp