Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][LINUX]PHP wiesza maszynę
Morfi777
post 24.04.2011, 01:17:01
Post #1





Grupa: Zarejestrowani
Postów: 76
Pomógł: 1
Dołączył: 5.09.2007

Ostrzeżenie: (0%)
-----


Hej,

mam skrypt w php który otwiera pliki kolejno 1, 2, 3 itd, jest ich 130tys. Czyta je i wyciąga z nich nazwiska.

Oczywiście dzieje się to w pętli for. Ustawiłem for 1 do 1000. Leciał i wypluwał te naziwska.

Zauważyłem, że po jakimś czasie zaczyna to robić coraz wolniej i wolniej. W końcu skończył, ale po tym maszyna strasznie muliła, czas reakcji był około 15-20 sekund, po jakimś czasie samo się unormowało. W międzyczasie sprawdzałem, CPU i MEM nie skakało, ale w logach znalazłem, ze numproc (wątków) przewyższyło o 2500(!)

Czy php nie zrzuca bufora w pętli? tylko trzyma go aż do samego końca? Co mogę zrobić żeby wymusić przy końcówce pętli zrzucenie wszystkiego co zbędne?


Dzięki!
Go to the top of the page
+Quote Post
Bags_Bunny
post 24.04.2011, 01:22:39
Post #2





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

Ostrzeżenie: (0%)
-----


Pokaż kod.

Funkcja, o którą pytasz to flush, ale mam dziwne przeczucie, że to nie ma nic do rzeczy. Może np. nie zamykasz plików?

I jaki jest sens plucia tylu rekordów? Nie lepiej sobie zapisać do pliku tekstowego i go ściągnąć albo nawet do bazy danych i mieć pełną swobodę?

Ten post edytował Bags_Bunny 24.04.2011, 01:23:33


--------------------
rm -rf /*
Go to the top of the page
+Quote Post
Morfi777
post 24.04.2011, 01:54:12
Post #3





Grupa: Zarejestrowani
Postów: 76
Pomógł: 1
Dołączył: 5.09.2007

Ostrzeżenie: (0%)
-----


Hej,

może powinienem unsetować buffer za każdym razem?

Pokazałbym, ale jest w nim taki burdel że rzygać się chce, zmienne ponazywane a,b,c,d, tabulatory nie istnieją, breaki też rzadko

Co do plików to są one na zewnętrznym serwerze, używam do tego curl'a. TO ważne?

Schemat jest taki

od 1 to 1000, wykonuj
<instruckje curla: init, setopt, exec, close>
<filtrowanie: preg_match_all'em>
<printowanie wyników>

<dodatkowe warunki tworzące dodatkowe pętle for>

koniec (i znów od początku)


oczywiscie zrzucam to w powłoce ( ~# time php dump.php 1 1000 >> 1to1000.dump )


Dzięki!

Ok, wrzucam smile.gif

  1. <?php
  2.  
  3.  
  4. for($file = $argv[1]; $file <= $argv[2]; $file++)
  5. {
  6. $dump = curl_init ();
  7.  
  8. curl_setopt($dump, CURLOPT_RETURNTRANSFER, 1);
  9. curl_setopt($dump, CURLOPT_URL, "http://URL/file.php?p=" . $file);
  10.  
  11. $buffer = curl_exec($dump);
  12.  
  13. curl_close($dump);
  14.  
  15. $found = false;
  16. $valid = true;
  17.  
  18. if ( preg_match( '/You do not have permission to view this file/', $buffer) )
  19. $valid = false;
  20.  
  21. if ( preg_match( '/the link that brought/', $buffer) )
  22. $valid = false;
  23.  
  24. if ( empty($buffer) )
  25. $valid = false;
  26.  
  27. if( $valid )
  28. {
  29. $page = 1;
  30.  
  31. preg_match_all(_PATTERN_, $buffer, $result);
  32.  
  33. $PageCount = count($result[0]);
  34.  
  35. if($PageCount > 0)
  36. {
  37. print("file: " . $file);
  38. print(" Page: " . $page ."\n");
  39. }
  40.  
  41. for($i = 0; $i < $PageCount; $i ++)
  42. print($result[0][$i] . "\n");
  43.  
  44.  
  45. if($PageCount > 0)
  46. print("\n");
  47.  
  48.  
  49. if ( !preg_match('/Page 1 of 1/', $buffer) )
  50. do
  51. {
  52. $page++;
  53. $temp = '/Page 1 of ' . $page . '/';
  54.  
  55. if ( preg_match($temp, $buffer) )
  56. $found = true;
  57. }
  58. while(!$found);
  59.  
  60. if ($page > 1)
  61. for($var = 2; $var <= $page; $var++)
  62. {
  63.  
  64. $TempVar = $var * 10;
  65.  
  66. $dump = curl_init ();
  67.  
  68. curl_setopt($dump, CURLOPT_RETURNTRANSFER, 1);
  69. curl_setopt($dump, CURLOPT_URL, "http://URL/file.php?p=" . $file . "&q=" . $TempVar);
  70.  
  71. $buffer2 = curl_exec($dump);
  72.  
  73. curl_close($dump);
  74.  
  75.  
  76. preg_match_all(_PATTERN_, $buffer, $result);
  77. $PageCount = count($result[0]);
  78.  
  79. if($PageCount > 0)
  80. {
  81. print("file: " . $file);
  82. print(" Page: " . $var ."\n");
  83. }
  84.  
  85. for($i = 0; $i < $PageCount; $i ++)
  86. print($result[0][$i] . "\n");
  87.  
  88.  
  89. if($PageCount > 0)
  90. print("\n");
  91.  
  92. }
  93. }
  94. }
  95. ?>


Ten post edytował Morfi777 24.04.2011, 01:59:33
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 18:37