mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-10 14:51:09 +00:00
Allow limitation by loadavg not just calls (should be BSD friendly)...
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6850 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
|
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
|
||||||
.\" Please send any bug reports, improvements, comments, patches,
|
.\" Please send any bug reports, improvements, comments, patches,
|
||||||
.\" etc. to Steve Cheng <steve@ggi-project.org>.
|
.\" etc. to Steve Cheng <steve@ggi-project.org>.
|
||||||
.TH "ASTERISK" "8" "18 October 2005" "asterisk 1.2" ""
|
.TH "ASTERISK" "8" "25 October 2005" "asterisk 1.2" ""
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
asterisk \- All-purpose telephony server.
|
asterisk \- All-purpose telephony server.
|
||||||
@@ -80,6 +80,11 @@ Provide brief summary of command line arguments and terminate.
|
|||||||
Prompt user to intialize any encrypted private keys for IAX2
|
Prompt user to intialize any encrypted private keys for IAX2
|
||||||
secure authentication during startup.
|
secure authentication during startup.
|
||||||
.TP
|
.TP
|
||||||
|
\fB-L \fIloadaverage\fB\fR
|
||||||
|
Limits the maximum load average before rejecting new calls. This can
|
||||||
|
be useful to prevent a system from being brought down by terminating
|
||||||
|
too many simultaneous calls.
|
||||||
|
.TP
|
||||||
\fB-M \fIvalue\fB\fR
|
\fB-M \fIvalue\fB\fR
|
||||||
Limits the maximum number of calls to the specified value. This can
|
Limits the maximum number of calls to the specified value. This can
|
||||||
be useful to prevent a system from being brought down by terminating
|
be useful to prevent a system from being brought down by terminating
|
||||||
|
11
asterisk.c
11
asterisk.c
@@ -143,6 +143,7 @@ int option_overrideconfig = 0;
|
|||||||
int option_reconnect = 0;
|
int option_reconnect = 0;
|
||||||
int option_transcode_slin = 1;
|
int option_transcode_slin = 1;
|
||||||
int option_maxcalls = 0;
|
int option_maxcalls = 0;
|
||||||
|
double option_maxload = 0.0;
|
||||||
int option_dontwarn = 0;
|
int option_dontwarn = 0;
|
||||||
int option_priority_jumping = 1;
|
int option_priority_jumping = 1;
|
||||||
int fully_booted = 0;
|
int fully_booted = 0;
|
||||||
@@ -1872,6 +1873,10 @@ static void ast_readconfig(void) {
|
|||||||
if ((sscanf(v->value, "%d", &option_maxcalls) != 1) || (option_maxcalls < 0)) {
|
if ((sscanf(v->value, "%d", &option_maxcalls) != 1) || (option_maxcalls < 0)) {
|
||||||
option_maxcalls = 0;
|
option_maxcalls = 0;
|
||||||
}
|
}
|
||||||
|
} else if (!strcasecmp(v->name, "maxload")) {
|
||||||
|
if ((sscanf(v->value, "%lf", &option_maxload) != 1) || (option_maxload < 0.0)) {
|
||||||
|
option_maxload = 0.0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
v = v->next;
|
v = v->next;
|
||||||
}
|
}
|
||||||
@@ -1930,7 +1935,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
/* Check for options */
|
/* Check for options */
|
||||||
while((c=getopt(argc, argv, "tThfdvVqprRgcinx:U:G:C:M:")) != -1) {
|
while((c=getopt(argc, argv, "tThfdvVqprRgcinx:U:G:C:L:M:")) != -1) {
|
||||||
switch(c) {
|
switch(c) {
|
||||||
case 'd':
|
case 'd':
|
||||||
option_debug++;
|
option_debug++;
|
||||||
@@ -1966,6 +1971,10 @@ int main(int argc, char *argv[])
|
|||||||
if ((sscanf(optarg, "%d", &option_maxcalls) != 1) || (option_maxcalls < 0))
|
if ((sscanf(optarg, "%d", &option_maxcalls) != 1) || (option_maxcalls < 0))
|
||||||
option_maxcalls = 0;
|
option_maxcalls = 0;
|
||||||
break;
|
break;
|
||||||
|
case 'L':
|
||||||
|
if ((sscanf(optarg, "%lf", &option_maxload) != 1) || (option_maxload < 0.0))
|
||||||
|
option_maxload = 0.0;
|
||||||
|
break;
|
||||||
case 'q':
|
case 'q':
|
||||||
option_quiet++;
|
option_quiet++;
|
||||||
break;
|
break;
|
||||||
|
@@ -152,6 +152,16 @@
|
|||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>-L <replaceable class="parameter">loadaverage</replaceable></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Limits the maximum load average before rejecting new calls. This can
|
||||||
|
be useful to prevent a system from being brought down by terminating
|
||||||
|
too many simultaneous calls.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>-M <replaceable class="parameter">value</replaceable></term>
|
<term>-M <replaceable class="parameter">value</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@@ -43,6 +43,7 @@ extern int option_cache_record_files;
|
|||||||
extern int option_timestamp;
|
extern int option_timestamp;
|
||||||
extern int option_transcode_slin;
|
extern int option_transcode_slin;
|
||||||
extern int option_maxcalls;
|
extern int option_maxcalls;
|
||||||
|
extern double option_maxload;
|
||||||
extern int option_dontwarn;
|
extern int option_dontwarn;
|
||||||
extern int option_priority_jumping;
|
extern int option_priority_jumping;
|
||||||
extern char defaultlanguage[];
|
extern char defaultlanguage[];
|
||||||
|
9
pbx.c
9
pbx.c
@@ -2477,7 +2477,7 @@ out:
|
|||||||
static int increase_call_count(const struct ast_channel *c)
|
static int increase_call_count(const struct ast_channel *c)
|
||||||
{
|
{
|
||||||
int failed = 0;
|
int failed = 0;
|
||||||
|
double curloadavg;
|
||||||
ast_mutex_lock(&maxcalllock);
|
ast_mutex_lock(&maxcalllock);
|
||||||
if (option_maxcalls) {
|
if (option_maxcalls) {
|
||||||
if (countcalls >= option_maxcalls) {
|
if (countcalls >= option_maxcalls) {
|
||||||
@@ -2485,6 +2485,13 @@ static int increase_call_count(const struct ast_channel *c)
|
|||||||
failed = -1;
|
failed = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (option_maxload) {
|
||||||
|
getloadavg(&curloadavg, 1);
|
||||||
|
if (curloadavg >= option_maxload) {
|
||||||
|
ast_log(LOG_NOTICE, "Maximum loadavg limit of %lf load exceeded by '%s' (currently %f)!\n", option_maxload, c->name, curloadavg);
|
||||||
|
failed = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!failed)
|
if (!failed)
|
||||||
countcalls++;
|
countcalls++;
|
||||||
ast_mutex_unlock(&maxcalllock);
|
ast_mutex_unlock(&maxcalllock);
|
||||||
|
Reference in New Issue
Block a user