/usr/share/perl5/Perlbal/Manual/Debugging.pod is in libperlbal-perl 1.80-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | =head1 NAME
Perlbal::Manual::Debugging - Debugging Perlbal
=head2 VERSION
Perlbal 1.78.
=head2 DESCRIPTION
Perlbal has two ways of debugging.
One of them is through a management console; the other is through debugging messages.
=head2 Debugging in a console
You'll need to set up a management service and use it to dump all the information you require.
The comprehensive documentation on this process can be found at L<Perlbal::Manual::Management>.
=head2 Debugging messages
You can control the ammount of debugging messages Perlbal dumps by setting the environment variable C<PERLBAL_DEBUG> to a value between 0 and 4:
PERLBAL_DEBUG = 0 # no debug
PERLBAL_DEBUG = 4 # debug everything
=head3 Debug level 1
You can activate basic debug by setting C<PERLBAL_DEBUG> to 1:
PERLBAL_DEBUG = 1
The following debugging messages are turned on:
=over 4
=item * When a connection to a backend is closed, L<Perlbal::BackendHTTP> prints C<Backend $self is done; closing...>
=item * When a connection to a backend is killed, L<Perlbal::ClientProxy> prints C<Client ($self) closing backend ($backend)>
=item * When an HTTP request fails to be parsed, L<Perlbal::HTTPHeaders> prints C<HTTP parse failure: $reason>
=item * When the connection is promoted to SSL, L<Perlbal::TCPListener> prints C< .. socket upgraded to SSL!>
=back
=head3 Debug level 2
By setting the debug level to 2 you'll get all the messages from level 1.
PERLBAL_DEBUG = 2
You will also get a few others:
=over 4
=item * When a connection to a backend is opened and ready to be written to, L<Perlbal::BackendHTTP> prints C<Backend $self is writeable!>
=item * When a response is about to be handled, L<Perlbal::BackendHTTP> prints C<BackendHTTP: handle_response>
=item * When a backend is ready to be read from, L<Perlbal::BackendHTTP> prints C<Backend $self is readable!>
=item * When there's an error with the connection to the backend, L<Perlbal::BackendHTTP> prints C<BACKEND event_err>
=item * Whenever we're determining if we should be sending keep-alive header information back to the client, L<Perlbal::ClientHTTPBase> prints C<ClientHTTPBase::setup_keepalive($self)>
=item * Whenever the client is ready for more of its file, L<Perlbal::ClientHTTPBase> prints C<REPROXY SSL done>
=item * Right after we've read a chunk of a file and when a reproxy request is about to be sent, L<Perlbal::ClientHTTPBase> prints C<REPROXY Sent: $sent>
=item * When we've written all data in the queue (and are about to stop waiting for write notifications), L<Perlbal::ClientHTTPBase> prints C<All writing done to $self>
=item * Whenever a client proxy is about to be closed, L<Perlbal::ClientProxy> prints C<Perlbal::ClientProxy closed>, followed by a possible C<again> and a possible C<saying $reason>
=item * When a client has disconnected, L<Perlbal::ClientProxy> prints C<ClientProxy::client_disconnected>
=item * When a backend requests a client of a high priority request and the client is available, L<Perlbal/Service> prints C<Got from fast queue, in front of $backlog others>
=item * When a backend requests a client of a normal priority request and the client is available, L<Perlbal/Service> prints C<Backend requesting client, got PRIORITY = $cp->{fd}.>
=item * When a backend requests a client of a low priority request and the client is available, L<Perlbal/Service> prints C<Backend requesting client, got low priority = $cp->{fd}.>
=item * When header are being read, L<Perlbal::Socket> prints C<Perlbal::Socket::read_headers($self) is_res=$is_res>
=back
=head3 Debug level 3
PERLBAL_DEBUG = 3
By setting the debug level to 3 you'll get all the messages from level 1 and 2 plus the following:
=over 4
=item * Right before response headers are written to the client, L<Perlbal::BackendHTTP> prints C< writing response headers to client>
=item * As we're writing to the client, L<Perlbal::BackendHTTP> prints C< content_length=VALUE> and C< remain=VALUE>, where the values are C<undef> if they are not defined
=item * If we're done writing to the client, L<Perlbal::BackendHTTP> prints C< done. detaching.>
=item * Whenever we're determining if we should be sending keep-alive header information back to the client, L<Perlbal::ClientHTTPBase> prints C< service's persist_client = $persist_client>
=item * While determining if we should be sending keep-alive header information back to the client, if we were sent C<content-length> or it's a head request, as we're doing a keep alive L<Perlbal::ClientHTTPBase> prints C< doing keep-alive to client>
=item * If we're not sending keep-alive header information back ot the client, L<Perlbal::ClientHTTPBase> prints C< doing connection: close>
=item * Right after we've finished sending all of the results to the user, L<Perlbal::ClientProxy> prints C<ClientProxy::backend_finished>
=item * When we've sent a response to a user fully and we need to reset state, L<Perlbal::ClientProxy> prints C<ClientProxy::http_response_sent -- resetting state>
=item * When we're writing a response to a client, L<Perlbal::ClientProxy> prints C<ClientProxy::event_write>
=item * After writing a response to a client, if it is still connected and we're triggering trigger our backend to keep reading, L<Perlbal::ClientProxy> prints C< unstalling backend>
=item * When reading a request, L<Perlbal::ClientProxy> prints C<ClientProxy::event_read>
=item * When reading a request and just before we read the headers, L<Perlbal::ClientProxy> prints C< no headers. reading.>
=item * When reading a request, if we're not buffering to disk or we're no longer reading, as we disable reads, L<Perlbal::ClientProxy> prints C< disabling reads.>
=item * As we're reading, L<Perlbal::ClientProxy> prints C< reading $read_size bytes (VALUE bytes remain)>, where C<VALUE bytes remain> can be <undef>
=item * After each read, L<Perlbal::ClientProxy> prints C< read $len bytes>
=item * After we finished reading the request, L<Perlbal::ClientProxy> prints C< done_reading = $done_reading, backend = BACKEND>, where C<BACKEND> can be C<undef>
=item * When we send the headers to the backend and it responds before we're done reading from the client, further reads from the client are discarded; in this situation L<Perlbal::ClientProxy> prints C< already responded.>. If the client continues to send data, L<Perlbal::ClientProxy> prints C< already responded [2].> and then gives up on reading
=item * After reading, and having a backend available where we can write to, just before we do, L<Perlbal::ClientProxy> prints C< got a backend. sending write to it.>
=item * After reading, if there's no backend available, L<Perlbal::ClientProxy> prints C< no backend. read_ahead = $self->{read_ahead}.>
=item * If we know we've already started spooling a file to disk and we're about to continue doing so, L<Perlbal::ClientProxy> prints C< bureason = $self->{bureason}>
=item * If a backend wasn't available and we're about to request one, L<Perlbal::ClientProxy> prints C< finally requesting a backend>
=item * When we're trying to read headers and the client has disconnected, L<Perlbal::Socket> prints C< client disconnected>
=item * If we need to remove a trailing C<\r\n> from the headers, L<Perlbal::Socket> prints C< throwing away leading \r\n>
=item * If we've read a packet with headers and by the end of it we can't find the end of them, L<Perlbal::Socket> prints C< can't find end of headers>
=item * Once we've read some headers, L<Perlbal::Socket> prints C< pre-parsed headers: [$hstr]>
=item * After reading headers, if there's additional content that we've read, we push it back; when we do so, L<Perlbal::Socket> prints C< pushing back $len bytes after header>
=item * If we got bogus headers, and right before we close the connection due to a parsing failure, L<Perlbal::Socket> prints C< bogus headers>
=item * If we got valid headers, L<Perlbal::Socket> prints C< got valid headers>
=item * If we're reading buffered data from a client, L<Perlbal::Socket> prints C<draining readbuf from $self to $dest: [$$bref]>
=back
=head3 Debug level 4
By setting the debug level to 4 you get all the messages from levels 1 to 3.
Plus, C<write> is redefined so that whenever C<write> is called it first prints C<write($self, E<lt>$clenE<gt>"$content") from ($pkg, $filename, $line)>.
PERLBAL_DEBUG = 4
=head2 SEE ALSO
L<Perlbal::Manual::Configuration>,
L<Perlbal::Manual::Management>.
|