Hi,
We are deploying OpenSER in a large infrastructure together with Asterisk to support thousands of current transactions.
We are using udp listener and mysql module in openser.
We had to increase the children parameter of the openser.cfg to 200 because Openser couldn't handle the high amount of concurrent SIP REQUESTs from ASTERISK (Not only INVITES, but also a lot of SIP OPTIONs), that means that Openser couldn't handle more than 'children' REQUEST loosing the rest of the concurrent REQUEST.
children=200
But then, the following error appeared in the openser:
ERROR:mysql:db_mysql_new_connection: driver error: Too many connections
This is because the Standard parameter of mysql "max_connections" is set to 100.
In mysql CLI, we can see that every child process of openser has a mysql connection. (see in Mysql> SHOW PROCESSLIST)
The recommended max_connections parameter is 500-1000 => we have a limit of 500-1000 concurrent SIP REQUEST to be processed by the openser.
Why there is a process for every child?
Why is neccesary a mysql connection for every child? Can the openser have a pool of mysql connection to be used by thousands of children?
Regards
Increasing the number of children to 200 will not help. Most likely, your config is doing something 'wrong' or being terribly intensive on mysql db. Openser is very light and it can handle lot's of transaction, but if you are using a slow db and you are doing db queries during your transaction processing, then your server will be slow.
Check your config and see what's going 'wrong' there.
As a reference, openser is able to do 150 cps using a single child and the CPU is barely utilized (on a slow machine).
Regards, Ovidiu Sas
On Wed, Sep 3, 2008 at 10:31 AM, Samael - samael.zgz@gmail.com wrote:
Hi,
We are deploying OpenSER in a large infrastructure together with Asterisk to support thousands of current transactions.
We are using udp listener and mysql module in openser.
We had to increase the children parameter of the openser.cfg to 200 because Openser couldn't handle the high amount of concurrent SIP REQUESTs from ASTERISK (Not only INVITES, but also a lot of SIP OPTIONs), that means that Openser couldn't handle more than 'children' REQUEST loosing the rest of the concurrent REQUEST.
children=200
But then, the following error appeared in the openser:
ERROR:mysql:db_mysql_new_connection: driver error: Too many connections
This is because the Standard parameter of mysql "max_connections" is set to 100.
In mysql CLI, we can see that every child process of openser has a mysql connection. (see in Mysql> SHOW PROCESSLIST)
The recommended max_connections parameter is 500-1000 => we have a limit of 500-1000 concurrent SIP REQUEST to be processed by the openser.
Why there is a process for every child?
Why is neccesary a mysql connection for every child?
Can the openser have a pool of mysql connection to be used by thousands of children?
Regards
Users mailing list Users@lists.kamailio.org http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
Thanks for your response.
We realized that with 200 children the problem is still happing.
We are using db ( MySQL 5 ) in every request in the config file through the following modules:
- lcr: to check every request where come from
- dispatcher: to make load balancing with a pool of asterisk in cluster
- avpsops: to use some user preferences
- carrieroute: to balance outbound calls to several providers
Is this a high load of db transactions to the openser?
Regards
2008/9/3 Ovidiu Sas osas@voipembedded.com
Increasing the number of children to 200 will not help. Most likely, your config is doing something 'wrong' or being terribly intensive on mysql db. Openser is very light and it can handle lot's of transaction, but if you are using a slow db and you are doing db queries during your transaction processing, then your server will be slow.
Check your config and see what's going 'wrong' there.
As a reference, openser is able to do 150 cps using a single child and the CPU is barely utilized (on a slow machine).
Regards, Ovidiu Sas
On Wed, Sep 3, 2008 at 10:31 AM, Samael - samael.zgz@gmail.com wrote:
Hi,
We are deploying OpenSER in a large infrastructure together with Asterisk
to
support thousands of current transactions.
We are using udp listener and mysql module in openser.
We had to increase the children parameter of the openser.cfg to 200
because
Openser couldn't handle the high amount of concurrent SIP REQUESTs from ASTERISK (Not only INVITES, but also a lot of SIP OPTIONs), that means
that
Openser couldn't handle more than 'children' REQUEST loosing the rest of
the
concurrent REQUEST.
children=200
But then, the following error appeared in the openser:
ERROR:mysql:db_mysql_new_connection: driver error: Too many connections
This is because the Standard parameter of mysql "max_connections" is set
to
In mysql CLI, we can see that every child process of openser has a mysql connection. (see in Mysql> SHOW PROCESSLIST)
The recommended max_connections parameter is 500-1000 => we have a limit
of
500-1000 concurrent SIP REQUEST to be processed by the openser.
Why there is a process for every child?
Why is neccesary a mysql connection for every child?
Can the openser have a pool of mysql connection to be used by thousands
of
children?
Regards
Users mailing list Users@lists.kamailio.org http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
If the problem is really the database then just remove all the database lookups (replace them with some static result) and test again. Then, add again one DB lookup after the other and always test the perfomance. This shuold give you an idea were the bottleneck is located.
klaus
Samael - schrieb:
Thanks for your response.
We realized that with 200 children the problem is still happing.
We are using db ( MySQL 5 ) in every request in the config file through the following modules:
- lcr: to check every request where come from - dispatcher: to make load balancing with a pool of asterisk in cluster - avpsops: to use some user preferences - carrieroute: to balance outbound calls to several providers
Is this a high load of db transactions to the openser?
Regards
2008/9/3 Ovidiu Sas <osas@voipembedded.com mailto:osas@voipembedded.com>
Increasing the number of children to 200 will not help. Most likely, your config is doing something 'wrong' or being terribly intensive on mysql db. Openser is very light and it can handle lot's of transaction, but if you are using a slow db and you are doing db queries during your transaction processing, then your server will be slow. Check your config and see what's going 'wrong' there. As a reference, openser is able to do 150 cps using a single child and the CPU is barely utilized (on a slow machine). Regards, Ovidiu Sas On Wed, Sep 3, 2008 at 10:31 AM, Samael - <samael.zgz@gmail.com <mailto:samael.zgz@gmail.com>> wrote: > Hi, > > > > We are deploying OpenSER in a large infrastructure together with Asterisk to > support thousands of current transactions. > > We are using udp listener and mysql module in openser. > > > > We had to increase the children parameter of the openser.cfg to 200 because > Openser couldn't handle the high amount of concurrent SIP REQUESTs from > ASTERISK (Not only INVITES, but also a lot of SIP OPTIONs), that means that > Openser couldn't handle more than 'children' REQUEST loosing the rest of the > concurrent REQUEST. > > children=200 > > > > But then, the following error appeared in the openser: > > ERROR:mysql:db_mysql_new_connection: driver error: Too many connections > > > > This is because the Standard parameter of mysql "max_connections" is set to > 100. > > > > In mysql CLI, we can see that every child process of openser has a mysql > connection. (see in Mysql> SHOW PROCESSLIST) > > > > The recommended max_connections parameter is 500-1000 => we have a limit of > 500-1000 concurrent SIP REQUEST to be processed by the openser. > > > > Why there is a process for every child? > > > > Why is neccesary a mysql connection for every child? > > Can the openser have a pool of mysql connection to be used by thousands of > children? > > Regards > > _______________________________________________ > Users mailing list > Users@lists.kamailio.org <mailto:Users@lists.kamailio.org> > http://lists.kamailio.org/cgi-bin/mailman/listinfo/users > >
Users mailing list Users@lists.kamailio.org http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
lcr: it doesn't use the db during the normal operation dispatcher: it doesn't use the db during the normal operation carrierroute: it doesn't use the db during the normal operation
avpops: it is the only module that will perform db transactions during normal operations (if you are performing them from the script).
Check your script and see what kind of operations are you doing. Remove them and see if this will help. Also check if you are doing dns lookups. Check how much logging are you performing. Check your debug level (don't run with debug=9). There are lots of things to check and fine tuning to perform before putting the system in production. Especially for systems under high load.
Regards, Ovidiu Sas
On Thu, Sep 4, 2008 at 7:04 AM, Samael - samael.zgz@gmail.com wrote:
Thanks for your response.
We realized that with 200 children the problem is still happing.
We are using db ( MySQL 5 ) in every request in the config file through the following modules:
- lcr: to check every request where come from - dispatcher: to make load balancing with a pool of asterisk in cluster - avpsops: to use some user preferences - carrieroute: to balance outbound calls to several providers
Is this a high load of db transactions to the openser?
Regards
2008/9/3 Ovidiu Sas osas@voipembedded.com
Increasing the number of children to 200 will not help. Most likely, your config is doing something 'wrong' or being terribly intensive on mysql db. Openser is very light and it can handle lot's of transaction, but if you are using a slow db and you are doing db queries during your transaction processing, then your server will be slow.
Check your config and see what's going 'wrong' there.
As a reference, openser is able to do 150 cps using a single child and the CPU is barely utilized (on a slow machine).
Regards, Ovidiu Sas
On Wed, Sep 3, 2008 at 10:31 AM, Samael - samael.zgz@gmail.com wrote:
Hi,
We are deploying OpenSER in a large infrastructure together with Asterisk to support thousands of current transactions.
We are using udp listener and mysql module in openser.
We had to increase the children parameter of the openser.cfg to 200 because Openser couldn't handle the high amount of concurrent SIP REQUESTs from ASTERISK (Not only INVITES, but also a lot of SIP OPTIONs), that means that Openser couldn't handle more than 'children' REQUEST loosing the rest of the concurrent REQUEST.
children=200
But then, the following error appeared in the openser:
ERROR:mysql:db_mysql_new_connection: driver error: Too many connections
This is because the Standard parameter of mysql "max_connections" is set to 100.
In mysql CLI, we can see that every child process of openser has a mysql connection. (see in Mysql> SHOW PROCESSLIST)
The recommended max_connections parameter is 500-1000 => we have a limit of 500-1000 concurrent SIP REQUEST to be processed by the openser.
Why there is a process for every child?
Why is neccesary a mysql connection for every child?
Can the openser have a pool of mysql connection to be used by thousands of children?
Regards
Users mailing list Users@lists.kamailio.org http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
Users mailing list Users@lists.kamailio.org http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
On Thursday 04 September 2008, Ovidiu Sas wrote:
lcr: it doesn't use the db during the normal operation dispatcher: it doesn't use the db during the normal operation carrierroute: it doesn't use the db during the normal operation
Hi Ovidiu,
don't want to be nitpicking, but cr_user_rewrite_uri/ cr_user_carrier does one query DB during script execution, to get the user carrier.
Perhaps i should document this in the function description for the 1.4 version too.
Henning
Hi Henning,
Yes, you are right :) Since I'm not using this functionality ... it slipped out. Sorry for the confusion ... Yes, it would be good to document this in both 1.3, 1.4 and trunk. Too much documentation doesn't hurt at all ;)
Regards, Ovidiu Sas
On Thu, Sep 4, 2008 at 9:44 AM, Henning Westerholt henning.westerholt@1und1.de wrote:
On Thursday 04 September 2008, Ovidiu Sas wrote:
lcr: it doesn't use the db during the normal operation dispatcher: it doesn't use the db during the normal operation carrierroute: it doesn't use the db during the normal operation
Hi Ovidiu,
don't want to be nitpicking, but cr_user_rewrite_uri/ cr_user_carrier does one query DB during script execution, to get the user carrier.
Perhaps i should document this in the function description for the 1.4 version too.
Henning