ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comความรู้ทั่วไปGeneral (ถามคุยวิชาการ IM)[สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [สอบถาม]ลองรัน สคริปที่เขียนเอง แล้ว memory เต็มง่าย  (อ่าน 1249 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
DewChelsea
ก๊วนเสียว
*

พลังน้ำใจ: 9
ออฟไลน์ ออฟไลน์

กระทู้: 422



ดูรายละเอียด เว็บไซต์
« เมื่อ: 04 เมษายน 2014, 18:45:51 »

ผมเขียนสคริปเก็บสินค้าขึ้นมา แล้วพอรันๆไปหลายลูปเนี่ย memory มันก็เต็มไปเรื่อยๆ  ทั้งๆที่ตั้งค่า php.ini เรียบร้อย

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

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

คำถามครับ ผมต้องการให้เวลารันแต่ละลูป มันไม่เก็บ ความจำของลูปที่ผ่านมาอะครับ เพื่อลดความจำของ memory


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

ใครพอมีประสปการณ์รบกวนด้วยครับ  Embarrassed
บันทึกการเข้า

antimage3114
ก๊วนเสียว
*

พลังน้ำใจ: 56
ออฟไลน์ ออฟไลน์

กระทู้: 423



ดูรายละเอียด
« ตอบ #1 เมื่อ: 04 เมษายน 2014, 18:49:55 »

ลอง unset($vars);
ดูครับผม ตัวแปรที่เก็บค่าต่างๆทุกตัวครับ unset มันให้หมดก่อนเริ่มไปเงื่อนไขถัดไป
ตัวอย่างง

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

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

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

edit : เพิ่ม ปล.
« แก้ไขครั้งสุดท้าย: 04 เมษายน 2014, 18:51:33 โดย antimage3114 » บันทึกการเข้า

Imagination is more important than knowledge.
smapan
Global Moderator
เจ้าพ่อบอร์ดเสียว
*****

พลังน้ำใจ: 643
ออฟไลน์ ออฟไลน์

กระทู้: 8,272



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 04 เมษายน 2014, 18:57:48 »

ใน loop เก็บอะไรบ้างครับ
เพราะบางครั้งตัวแปล ถ้าเราเอาไปเก็บค่าที่ไม่จำเป็นก็เต็มได้ง่ายๆครับ เช่นเอาไปเก็บอ่านเนื้อหาของ ไฟล์ใหญ่ๆครับ
บันทึกการเข้า

จูมล่าโฮส สยามโฮสเว็บ modty.com
รวมที่พัก เช่ารายวัน ที่พักเช่ารายเดือนมากที่สุดแจ่มจริง
***Tel 083-757-1515 ติดปัญหา Joomla ตรงไหนรับปรึกษาฟรี โทรมาเถอะครับ ถ้าตอบได้ช่วยแน่นอน ไม่มีกั้ก. ***
kongpair
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 333
ออฟไลน์ ออฟไลน์

กระทู้: 2,721



ดูรายละเอียด
« ตอบ #3 เมื่อ: 04 เมษายน 2014, 19:00:14 »

ล้างตัวแปรทุกครั้ง หลังใช้งาน เป็นการคืนพื้นที่หน่วยความจำ
บันทึกการเข้า
Synchronize
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 83
ออฟไลน์ ออฟไลน์

กระทู้: 1,231



ดูรายละเอียด
« ตอบ #4 เมื่อ: 04 เมษายน 2014, 19:15:37 »

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

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

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

 wanwan017
บันทึกการเข้า

DewChelsea
ก๊วนเสียว
*

พลังน้ำใจ: 9
ออฟไลน์ ออฟไลน์

กระทู้: 422



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 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 ครับ
บันทึกการเข้า

buy high pr domain
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 69
ออฟไลน์ ออฟไลน์

กระทู้: 1,565



ดูรายละเอียด
« ตอบ #6 เมื่อ: 04 เมษายน 2014, 20:19:36 »

unset
บันทึกการเข้า

Order cheap cheap Price supermarket bazaar market shop sells shop online business Order cheap bazaar
DewChelsea
ก๊วนเสียว
*

พลังน้ำใจ: 9
ออฟไลน์ ออฟไลน์

กระทู้: 422



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 04 เมษายน 2014, 20:43:06 »

unset

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

goldxp
สมุนแก๊งเสียว
*

พลังน้ำใจ: 73
ออฟไลน์ ออฟไลน์

กระทู้: 557



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 04 เมษายน 2014, 20:43:17 »

php เวอร์ชั่นอะไรครับ ต้องระวังพวกตัวแปร reference ด้วยครับ เพราะจะทำให้ memory เต็มได้ง่าย

http://www.php.net/manual/en/f...tures.gc.collecting-cycles.php
บันทึกการเข้า

DewChelsea
ก๊วนเสียว
*

พลังน้ำใจ: 9
ออฟไลน์ ออฟไลน์

กระทู้: 422



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 04 เมษายน 2014, 20:46:57 »

php เวอร์ชั่นอะไรครับ ต้องระวังพวกตัวแปร reference ด้วยครับ เพราะจะทำให้ memory เต็มได้ง่าย

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

ขอบคุณครับ 5.2.6 อะครับ
บันทึกการเข้า

ahon
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 72
ออฟไลน์ ออฟไลน์

กระทู้: 1,261



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 04 เมษายน 2014, 21:28:59 »

รูปภาพถ้าไม่จำเป็นอย่าเก็บลงdb/ตัวแปรครับให้เก็บลงดิส และกำหนดpath แทนครับเวลาใช้งานก็ค่อยดึงขึ้นมา
« แก้ไขครั้งสุดท้าย: 04 เมษายน 2014, 21:38:00 โดย ahon » บันทึกการเข้า

DewChelsea
ก๊วนเสียว
*

พลังน้ำใจ: 9
ออฟไลน์ ออฟไลน์

กระทู้: 422



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 04 เมษายน 2014, 21:58:25 »

รูปภาพถ้าไม่จำเป็นอย่าเก็บลงdb/ตัวแปรครับให้เก็บลงดิส และกำหนดpath แทนครับเวลาใช้งานก็ค่อยดึงขึ้นมา

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

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

Synchronize
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 83
ออฟไลน์ ออฟไลน์

กระทู้: 1,231



ดูรายละเอียด
« ตอบ #12 เมื่อ: 04 เมษายน 2014, 22:12:59 »

append csv  โค้ดเป็น ยังไงครับ

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

 wanwan017
บันทึกการเข้า

DewChelsea
ก๊วนเสียว
*

พลังน้ำใจ: 9
ออฟไลน์ ออฟไลน์

กระทู้: 422



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 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);
บันทึกการเข้า

goldxp
สมุนแก๊งเสียว
*

พลังน้ำใจ: 73
ออฟไลน์ ออฟไลน์

กระทู้: 557



ดูรายละเอียด เว็บไซต์
« ตอบ #14 เมื่อ: 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/f...performance-considerations.php

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

หน้า: [1]   ขึ้นบน
พิมพ์