ThaiSEOBoard.com

ความรู้ทั่วไป => General (ถามคุยวิชาการ IM) => ข้อความที่เริ่มโดย: DewChelsea ที่ 04 เมษายน 2014, 18:45:51



หัวข้อ: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: DewChelsea ที่ 04 เมษายน 2014, 18:45:51
ผมเขียนสคริปเก็บสินค้าขึ้นมา แล้วพอรันๆไปหลายลูปเนี่ย memory มันก็เต็มไปเรื่อยๆ  ทั้งๆที่ตั้งค่า php.ini เรียบร้อย

ทั้งๆที่เก็บ 4 array url,image,title,description

แค่ 30 ลูป memory ก็เต็มแล้วครับ

คำถามครับ ผมต้องการให้เวลารันแต่ละลูป มันไม่เก็บ ความจำของลูปที่ผ่านมาอะครับ เพื่อลดความจำของ memory
(http://s16.postimg.org/62dw5z6bp/2014_04_04_18_43_23.jpg)

ตรงช่อง memory พอขึ้น 3.2 gb เมื่อไหร้ สคริปหยุดทำงานทุกทีครับ
ลองใช้ sleep ก่อนเข้าลูป ก็ไม่ช่วยอะไรครับ

ใครพอมีประสปการณ์รบกวนด้วยครับ  :-[


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: antimage3114 ที่ 04 เมษายน 2014, 18:49:55
ลอง unset($vars);
ดูครับผม ตัวแปรที่เก็บค่าต่างๆทุกตัวครับ unset มันให้หมดก่อนเริ่มไปเงื่อนไขถัดไป
ตัวอย่างง

โค๊ด:
for($i = 0 ; $i <= 10 ; $i++ ){
$a = $i;
// do something

//-> afterthat
unset($a);
}

ปล. เหมือนตั้งกระทู้ผิดหมวดนะครับหมวด Programming ก็มีนะครับ

edit : เพิ่ม ปล.


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: smapan ที่ 04 เมษายน 2014, 18:57:48
ใน loop เก็บอะไรบ้างครับ
เพราะบางครั้งตัวแปล ถ้าเราเอาไปเก็บค่าที่ไม่จำเป็นก็เต็มได้ง่ายๆครับ เช่นเอาไปเก็บอ่านเนื้อหาของ ไฟล์ใหญ่ๆครับ


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: kongpair ที่ 04 เมษายน 2014, 19:00:14
ล้างตัวแปรทุกครั้ง หลังใช้งาน เป็นการคืนพื้นที่หน่วยความจำ


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: Synchronize ที่ 04 เมษายน 2014, 19:15:37
ตัว script ทำงาน นานรึป่าวครับ

เพราะ ปกติ php พอรันจบ มันก็คืน memory เข้าระบบอยู่แล้ว
ถ้าค่อยๆ เต็ม แสดงว่า มันทำงานไม่เสร็จ แล้วก็มีคนมาเปิดต่อเรื่อยๆ รึป่าว

แล้วใน php.ini  ตั้งค่า memory ไว้เท่าไร ครับ

 :wanwan017:


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: DewChelsea ที่ 04 เมษายน 2014, 19:19:34
ลอง unset($vars);
ดูครับผม ตัวแปรที่เก็บค่าต่างๆทุกตัวครับ unset มันให้หมดก่อนเริ่มไปเงื่อนไขถัดไป
ตัวอย่างง

โค๊ด:
for($i = 0 ; $i <= 10 ; $i++ ){
$a = $i;
// do something

//-> afterthat
unset($a);
}

ปล. เหมือนตั้งกระทู้ผิดหมวดนะครับหมวด Programming ก็มีนะครับ

edit : เพิ่ม ปล.

ขอโทษด้วยครับ ลืมไปว่าผิดหมวด unset แล้วครับ รันได้ซัก3ลูป ลูปละ100สินค้า ก็เต็มครับ
ใน loop เก็บอะไรบ้างครับ
เพราะบางครั้งตัวแปล ถ้าเราเอาไปเก็บค่าที่ไม่จำเป็นก็เต็มได้ง่ายๆครับ เช่นเอาไปเก็บอ่านเนื้อหาของ ไฟล์ใหญ่ๆครับ

url,image,title,description ครับ

ล้างตัวแปรทุกครั้ง หลังใช้งาน เป็นการคืนพื้นที่หน่วยความจำ
หมายถึง unset มั้ยครับ ?

ตัว script ทำงาน นานรึป่าวครับ

เพราะ ปกติ php พอรันจบ มันก็คืน memory เข้าระบบอยู่แล้ว
ถ้าค่อยๆ เต็ม แสดงว่า มันทำงานไม่เสร็จ แล้วก็มีคนมาเปิดต่อเรื่อยๆ รึป่าว

แล้วใน php.ini  ตั้งค่า memory ไว้เท่าไร ครับ

 :wanwan017:
2048 ครับ


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: buy high pr domain ที่ 04 เมษายน 2014, 20:19:36
unset


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: DewChelsea ที่ 04 เมษายน 2014, 20:43:06
unset

ทุกตัวแปร ใน loop for เลยใช่ปะครับ


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: goldxp ที่ 04 เมษายน 2014, 20:43:17
php เวอร์ชั่นอะไรครับ ต้องระวังพวกตัวแปร reference ด้วยครับ เพราะจะทำให้ memory เต็มได้ง่าย

http://www.php.net/manual/en/features.gc.collecting-cycles.php


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: DewChelsea ที่ 04 เมษายน 2014, 20:46:57
php เวอร์ชั่นอะไรครับ ต้องระวังพวกตัวแปร reference ด้วยครับ เพราะจะทำให้ memory เต็มได้ง่าย

[url]http://www.php.net/manual/en/features.gc.collecting-cycles.php[/url]

ขอบคุณครับ 5.2.6 อะครับ


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต&
เริ่มหัวข้อโดย: ahon ที่ 04 เมษายน 2014, 21:28:59
รูปภาพถ้าไม่จำเป็นอย่าเก็บลงdb/ตัวแปรครับให้เก็บลงดิส และกำหนดpath แทนครับเวลาใช้งานก็ค่อยดึงขึ้นมา


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต&
เริ่มหัวข้อโดย: DewChelsea ที่ 04 เมษายน 2014, 21:58:25
รูปภาพถ้าไม่จำเป็นอย่าเก็บลงdb/ตัวแปรครับให้เก็บลงดิส และกำหนดpath แทนครับเวลาใช้งานก็ค่อยดึงขึ้นมา

รูปภาพผมเก็บแค่ url ครับ
แต่1ลูป ผมจะ append ลง csv ครับ เก็บไว้ใน disk

ลอง unset และ clear dom แล้ว memory ยังเต็มอยุ่ ไม่ทราบเหมือนกันว่าจะเกี่ยวกับ การ append csv หรือเปล่าครับ


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: Synchronize ที่ 04 เมษายน 2014, 22:12:59
append csv  โค้ดเป็น ยังไงครับ

แล้ว ที่มาของ array มาจากไหนเหรอครับ

 :wanwan017:


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: DewChelsea ที่ 04 เมษายน 2014, 22:21:09
append csv  โค้ดเป็น ยังไงครับ

แล้ว ที่มาของ array มาจากไหนเหรอครับ

 :wanwan017:

ใช้ preg match ครับ เก็บ array ของแต่ละส่วนของหน้าเว็บ url,image,title,description

code csv
               $string = $urls.','.$image.','.$title.','.$desc."\n";
               $file = "data/".$_POST['name'].".csv";
               $handle = fopen($file, 'a+') or die("Can't Scrape Data");
               fwrite($handle, $string);


หัวข้อ: Re: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
เริ่มหัวข้อโดย: goldxp ที่ 04 เมษายน 2014, 22:31:10
php 5.2 มีปัญหาเรื่อง gc เวลามี circular reference อย่างเช่น node มี property อ้างอิงถึง parent node, memory จะถูกเก็บเพิ่มขึ้นเรื่อยๆ
คาดว่าเกิดจาก dom ที่มีการ reference ไปยัง parent node ครับ
http://www.php.net/manual/en/class.domnode.php
http://www.php.net/manual/en/features.gc.performance-considerations.php

ง่ายที่สุดคือเปลี่ยนไปใช้ย php5.3+ ครับ ถ้าแก้ที่โค้ดคือไม่ควรใช้ dom เปลี่ยนไปใช้ตัวอื่นที่ไม่มี circular reference