[mysql] Voorkomen openstaand blijvende conencties

Pagina: 1
Acties:

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 27-08 20:02
Ik weet niet echt of ik mn vraag in het juiste forum stel. Ik kon het niet echt bedenken waar ie juist zo passen, maar omdat MySQL aan PHP gerealteerd is en PHP hier wel thuis hoort stel ik hier de vraag maar...

Ik heb thuis het probleem dat elke geopende verbinding vanuit PHP naar MySQL niet automatisch gesloten wordt, waarvan ik altijd dacht dat het wel zo was.
Nu is dus het probleem dat al mn sockets (lees evt. als: poorten) op mn servertje daar door "bezet" worden met als gevolg dat na ongeveer 50.000 connecties er geen enkele verbiding met wat dan ook kan worden gemakt op die computer en dat heeft weer als gevolg dat ik de computer eerst weer opnieuw kan gaan opstarten.

Even ter verduidelijking mijn nedtstat statistieken:
code:
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
C:Documents and SettingsAdministrator>netstat

Actieve verbindingen

  Proto  Lokaal adres           Extern adres           Status
(...)
  TCP    nwserver:1031          nwserver:3306          TIME_WAIT
  TCP    nwserver:1032          nwserver:3306          TIME_WAIT
  TCP    nwserver:1033          nwserver:3306          TIME_WAIT
  TCP    nwserver:1034          nwserver:3306          TIME_WAIT
  TCP    nwserver:1035          nwserver:3306          TIME_WAIT
  TCP    nwserver:1037          nwserver:3306          TIME_WAIT
  TCP    nwserver:1038          nwserver:3306          TIME_WAIT
  TCP    nwserver:1040          nwserver:3306          TIME_WAIT
  TCP    nwserver:1041          nwserver:3306          TIME_WAIT
  TCP    nwserver:1042          nwserver:3306          TIME_WAIT
  TCP    nwserver:1043          nwserver:3306          TIME_WAIT
  TCP    nwserver:1045          nwserver:3306          TIME_WAIT
  TCP    nwserver:1046          nwserver:3306          TIME_WAIT
  TCP    nwserver:1047          nwserver:3306          TIME_WAIT
  TCP    nwserver:1053          nwserver:3306          TIME_WAIT
  TCP    nwserver:1054          nwserver:3306          TIME_WAIT
  TCP    nwserver:1061          nwserver:3306          TIME_WAIT
  TCP    nwserver:1062          nwserver:3306          TIME_WAIT
  TCP    nwserver:1081          nwserver:3306          TIME_WAIT
  TCP    nwserver:1082          nwserver:3306          TIME_WAIT
  TCP    nwserver:1083          nwserver:3306          TIME_WAIT
  TCP    nwserver:1084          nwserver:3306          TIME_WAIT
  TCP    nwserver:1085          nwserver:3306          TIME_WAIT
  TCP    nwserver:1086          nwserver:3306          TIME_WAIT
  TCP    nwserver:3306          nwserver:1030          TIME_WAIT
  TCP    nwserver:3306          nwserver:1055          TIME_WAIT
  TCP    nwserver:3306          nwserver:1063          TIME_WAIT
  TCP    nwserver:3306          nwserver:1069          TIME_WAIT
  TCP    nwserver:3306          nwserver:1075          TIME_WAIT
Ik denk dat u nu dus wel snapt wat ik bedoel :)

Nu dacht ik dat PHP de boosdoener was en dus heb ik ff in php.ini gekeken en deze regel:
code:
1
mysql.allow_persistent = On
Verander in:
code:
1
mysql.allow_persistent = Off
Maar ook dat hielp niet.

Verder is dit de hele MySQL-sectie in php.ini:
code:
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
[MySQL]
; Allow or prevent persistent links.
mysql.allow_persistent = Off

; Maximum number of persistent links.  -1 means no limit.
mysql.max_persistent = -1

; Maximum number of links (persistent + non-persistent).  -1 means no limit.
mysql.max_links = -1

; Default port number for mysql_connect().  If unset, mysql_connect() will use
; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
; at MYSQL_PORT.
mysql.default_port =

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket =

; Default host for mysql_connect() (doesn't apply in safe mode).
mysql.default_host =

; Default user for mysql_connect() (doesn't apply in safe mode).
mysql.default_user =

; Default password for mysql_connect() (doesn't apply in safe mode).
; Note that this is generally a *bad* idea to store passwords in this file.
; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
; and reveal this password!  And of course, any users with read access to this
; file will be able to reveal the password as well.
mysql.default_password =

; Maximum time (in secondes) for connect timeout. -1 means no limimt
mysql.connect_timeout = -1

; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
; SQL-Erros will be displayed.
mysql.trace_mode = Off


Weet iemand hoe ik de openstaand blijvende conencties het beste kan voorkomen zonder de connecties vanuit PHP naar MySQL al te veel belemmer (maw: dat ik de coonecties gewoon op de zelfde manier kan blijven maken in PHP)?
Of moet ik nu per se in mn PHP-scripts mysql_close() gaan gebruiken en mn verbindingen dus handmatig gaan sluiten?

  • Johnny
  • Registratie: December 2001
  • Laatst online: 04-09 13:30

Johnny

ondergewaardeerde internetguru

Heb je Apache (ik neem aan dat je die gebruikt) wel herstart? :X

verder zeg je niets over de versies van PHP /MySQL die je gebruikt, als ze verouderd zijn is het misschien een goed idee om te updaten.

[ Voor 56% gewijzigd door Johnny op 25-11-2003 22:09 ]

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:36

crisp

Devver

Pixelated

als je gewoon in je php script mysql_connect gebruikt zou hij de connectie na het beeindigen van het script ook weer af moeten sluiten, dit itt tot een mysql_pconnect.
Uiteraard is het wel netjes om aan het eind van je script (of zodra je een connectie in je script niet meer gebruikt) mysql_close() te doen. Ik vermoed dus eerder een software error, of een setting in je mysql.
PHP en mySQL horen normaal gesproken in Programming & Webscripting, maar omdat dit m.i. toch een software aangelegenheid is move ik 'm naar Software Algemeen

Intentionally left blank


  • Joen
  • Registratie: Juli 2003
  • Laatst online: 27-08 20:02
OK, hier wat info (geen verouderd spul dus):
Windows 2000 Pro NL SP4 + laatste updates
Vuurmuur & antivirus
Apache 2.0.46
PHP 4.3.3
MySQL 3.23.58

En jah, ik heb Apache ook al eens herstart. Sterker nog: ik heb gewoon de hele computer herstart (dus alles werd opnieuw geladen) en het probleem bleef.
Nouja, dan moet ik mysql_close() geen gebruiken tot dat iemand met de gouden tip komt....
Je ziet nl. op vooral Linux servers dat de connecties wel automatisch verbroken worden. Volgens mij is het dus mogelijk :P

Zowel Apache als MySQL draaien als NT Service.

[ Voor 5% gewijzigd door Joen op 25-11-2003 22:14 ]


  • Joen
  • Registratie: Juli 2003
  • Laatst online: 27-08 20:02
Aargh, ook het gebruik van mysql_close() helpt niet :?
De lijst blijft nog net zo als van te voren: lang

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 27-08 20:02
OK, ik heb de oorzaak dan eindelijk gevonden. Het bleek voor de verandering eens NIET Apache of PHP te zijn en evenmin MySQL zelf :-P

Omdat ik niet wist hoe je MySQL als service kunt laten draaien in Windows 2000 (en op mn vorige servertje zat Win98, dus zou als service draaien volgens mij helemaal niet willen) maakte ik gebruik van de meegeleverde tool MySQLAdmin (of zo iets, iig zo'n verkeerslicht icoontje in de apptray).
Ik denk: wat nu als ik die eens afsluit. Dus ikd at gedaan en PC nog es opnieuw opgestart en netstat weer uitgevoerd.
En raad eens: geen TIME_WAIT 's meer naar MySQL! :->
En MySQL bleef gelukkig nog wel draaien nu als service.
Nu start MySQLAdmin dus niet meer automatisch op en zo erg mis ik dat nu (naar je vast wel begrijpt) ook weer niet :-P

Ik vind het toch slordig dat dat programma dan telkens nieuwe verbindingen opent (om te testen of de MySQL server nog steeds draait). Afijn, problem likely solved :-)

Topic kan dan denk ik gesloten worden ;)
Pagina: 1