Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > Appserv : สอบถามเรื่องผลกระทบการเขียนโค้ดวน loop ครับ



 

Appserv : สอบถามเรื่องผลกระทบการเขียนโค้ดวน loop ครับ

 



Topic : 111782



โพสกระทู้ ( 44 )
บทความ ( 0 )



สถานะออฟไลน์




เรื่องมีอยู่ว่าผมทำเซิฟจำลองโดยใช้ appserve ครับ ใช้ทำเว็บเก็บข้อมูลนั่นแหละ

แล้วจู่ๆ เซิฟก็ล่ม มีการแจ้งจากผู้ใช้ว่าเข้าใช้งานไม่ได้ เมื่อลองเช็คสาเหตุก็ทราบว่า

ตัว appserve มันกิน cpu ไป 100% เลยทำให้เซิฟล่ม ซึ่งพอปิดแล้วรีสตาร์ทเซิฟ ก็กลับมาทำงานปกติ


ตอนนี้กำลังหาสาเหตุว่ามันมาจากอะไร ที่ผมเดาๆ คือ

1. สเป็คเซิฟเวอร์ต่ำเกินไป : cpu 1 core ram 1 gb hdd อีก 30 GB ถ้าหากมีคนมารุมใช้เว็บในช่งเวลาหนึ่งทีละมากๆ อาจทำให้ appserve ทำงานหนักแบบเฉียบพลัน ส่งผลให้เซิฟเวอร์ล่ม

2. โค้ดเว็บมีการรับคำสั่ง loop : คือรัน loop แบบไม่สิ้นสุด จบแล้วก็ยังรัน ทำให้เซิฟต้องประมวลผลส่วนนี้อย่างหนักจนกิน cpu มากไป


ประเด็นคือข้อ 2 เนี่ยแหละครับ อยากรู้เพิ่มเติมว่า คำสั่ง loop มันทำให้เซิฟทำงานหนักได้ขนาดนั้นเลยหรือ ( คำสั่ง loop ที่ผมใช้ มีแต่พวก loop เพื่อแสดงรายการข้อมูลเป็นตารางๆ ย่อยเป็นหน้าๆ เท่านั้น )

หรือใครที่รู้สาเหตุอื่นนอกจากนี้ ช่วยแนะนำหน่อยก็ได้ครับ ขอบคุณครับ



Tag : PHP, MySQL, Web (ASP.NET), Windows, Web Hosting







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-10-07 23:20:11 By : nimirue View : 1953 Reply : 15
 

 

No. 1



โพสกระทู้ ( 535 )
บทความ ( 0 )



สถานะออฟไลน์


ผมสงสัยว่า ข้อ 2 นะ loop เพื่อแสดงรายการข้อมูลเป็นตารางๆ อันนี้ ไป query ใน loop ปะ
แล้วมีพวก fpdf , tcpdf อีกอย่าง ครับ กิน cpu เยอะมาก






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-07 23:31:49 By : gaowteen
 


 

No. 2



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


หน่วยความจำไม่ใช่ประเด็นหลักครับ แต่การวนลูปไม่รู้จบ ไม่ยอมคลายคอนเนคชั่น นั่นคือประเด็นหลัก
ทำให้ไม่สามารถติดต่อกับคอมฯเครื่องอื่นๆ ได้

หน่่วยความจำรอได้ครับมันมีคิวการอินเทอรัฟ สามารถรอคิวงานได้

แต่ถ้าคอนเนคชั่นเต็มก็จะติดต่อใครไม่ได้อีก ทำให้เวปล่มครับ



ปล. ลองศึกษาเรื่อง mysql_pconnect() ดูครับ


ประวัติการแก้ไข
2014-10-08 06:52:57
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-08 06:49:28 By : Chaidhanan
 

 

No. 3



โพสกระทู้ ( 44 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : gaowteen เมื่อวันที่ 2014-10-07 23:31:49
รายละเอียดของการตอบ ::
ครับ ผมกำหนดตัวแปรคำสั่ง query ก่อน แล้วก็ใช้คำสั่ง while วนลูปคำสั่ง query ครับ


ตอบความคิดเห็นที่ : 2 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-10-08 06:49:28
รายละเอียดของการตอบ ::
ของพี่จะสื่อประมาณว่ามันมีการรัน connection ซ้ำๆกัน แล้วทุกครั้งที่รันซ้ำ คำสั่ง loop ก็จะทำงานตามไปด้วย ( ประมาณว่าเชื่อมต่อซ้ำ 10 ครั้ง loop ก็จะรันใหม่ 10 ครั้งเหมือนกัน ) ใช่มั้ยครับ?

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-08 08:55:20 By : nimirue
 


 

No. 4



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ถ้าเป็น Windows ผมยังแนะนำให้ใช้ IIS แทนครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-08 08:55:59 By : mr.win
 


 

No. 5

Guest


ทำไมไม่เอาโค้ดมาดูล่ะครับ จะได้รู้ว่าจริงๆเป็นเพราะอะไรกันแน่
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-08 09:13:23 By : FRINGE
 


 

No. 6



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

หรือไม่ตอนที่มันทำงานหนัก ๆ ลองเปิด phpMyAdmin ดูครับ แล้วดู Process ของ MySQL ถ้ามี Slow หรือ ค้าง มันจะแจ้งเลยว่า Query ไหนมีปัญหาครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-08 09:18:47 By : mr.win
 


 

No. 7



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

เป็นที่ mysql ค้างรึเปล่าครับ ผมเคยเจออาการประมาณนี้ แต่เป็นเพราะเปิด connection ของ mysql ไม่เพียงพอต่อจำนวนยูสเซอร์ที่ใช้ในช่วงเวลาเร่งด่วน แล้วก็หน่วยความจำใน mysql เปิดไว้น้อยเกินไป เจอคำสั่ง JOIN เยอะๆ ก็เลยค้างไปเลย พอไปปรับ my.ini แล้วก็ไม่ค้างอีก

และถ้าเป็นเรื่องของการเปิดปิดคอนเนกชั่น ลองลดจำนวนการคิวรี่ให้น้อยลงนะครับ แล้วก็เก็บข้อมูลในหน่วยความจำแบบอาร์เรย์ไปก่อน แล้วค่อยนำไปใช้งานต่ออีกทีเพื่อให้ปิดคอนเนกชั่นเร็วขึ้น
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-08 09:26:50 By : {Cyberman}
 


 

No. 8



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : nimirue เมื่อวันที่ 2014-10-08 08:55:20
รายละเอียดของการตอบ ::
ก่อนเข้า loop มีกี่ connection พอเข้าไปในลูป แล้วมันไม่มีการ disconnect


บางคอนเนคชั่่น ก็ไ่ม่ได้มีการเซทให้ disconnect โดย auto timeout มันก็จะค้างอยู่อย่างนั้น
เมื่อมีการเรียกใช้โปรแกรม โดยหลาย user หรือ userเดียว แต่เรียกใช้งาน pageนั้นซ้ำๆ
คอนเนคชั่นก็มีโอกาสเต็มได้

คอนเนคชั่นไม่ได้มีแค่เฉพาะ การติดต่อระหว่างคอมฯกับคอมฯเท่านั้น
แต่มันรวมไปถึงการ ติดต่อระหว่าง คอมฯกับไฟล์ด้วย เข่นการเปิด fopen ถ้ายังไม่ close ก็เป็นอีกคอนเนคชั่่นที่ค้างอยู่
และ ไฟล์คอนเนคชั่นนี่ ถ้าโปรแกรมยังทำงานอยู่ ก้ไม่ยอมปิดเหมือนกัน ถ้าไม่สั่งให้ปิดโดยตัวโปรแกรมเอง

ในหนึ่งโปรแกรม เราอาจจะคิดว่าเราเปิด คอนเนคชั่นแค่ คอมฯ กับคอมฯ โปรแกรมกับดาต้าเบสเซอเวอร์
PHP กับ apache แต่ในงานเหล่านี้ หนีไม่พ้น การคอนเนคชั่นกับ ไฟล์ ถ้าใครเคยใช้ dos เก่าๆ จะมีการ set config ใน
file system กำหนดให้เปิดไฟล์ได้เท่าไหร่ นั้นคือพื้นฐาน การคอนเนคชั่น ระหว่างโปรแกรมกับไฟล์

สมัยนี้เปิดได้เยอะก็จริง แต่ก็มีการใช้งานเยอะตามไปด้วย

เหมือนเมื่อก่อนใช้ แค่ 8bit เดี๋ยวนี้ 64 bit ก็ยังไม่อยากจะพอ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-08 14:00:10 By : Chaidhanan
 


 

No. 9



โพสกระทู้ ( 44 )
บทความ ( 0 )



สถานะออฟไลน์


ขอขุดกระทู้เดิมละกันครับ เพราะไม่อยากไปตั้งใหม่ เนื่องจากมันก็เรื่องเดียวกัน

ผมไปดูสถานะ เซิฟ mysql ดู เห็นตามภาพเลยครับ

1

2

3

4

5

เบื้องต้นผมเดาว่าสาเหตุที่ทำให้เซิฟวิ่ง 99% น่าจะมาจากตัวแดงๆ พวกนี้แหละ แต่ผมไม่รู้ว่าต้องแก้จุดไหน ยังไงบ้าง ( เข้าใจแต่ตรงที่บอกตอน join ไม่ใช้ index )

แล้วก็ตรงส่วน my.ini นี้ ผมก็ไม่รู้ว่าต้องปรับอะไรยังไง ขอคำแนะนำทีครับ

เพราะเท่าที่ดูแล้ว ถ้าแก้ไม่ครบทุกจุด มันคงวิ่ง 99% เรื่อยๆแน่นอน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-16 10:03:54 By : nimirue
 


 

No. 10

Guest


เอาโค้ดมาดูครับ ปรับยังไงมันก็ไม่ดีขึ้นถ้าคุณเขียนโค้ดไม่ดี

ถ้ามีโค้ดจะได้รู้ชัดๆว่ามันเพราะโค้ดหรือเปล่า ก่อนที่จะไปปรับอย่างอื่น เข้าใจป่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-16 10:18:16 By : เฮ้อ
 


 

No. 11



โพสกระทู้ ( 44 )
บทความ ( 0 )



สถานะออฟไลน์


อันนี้ส่วนแสดลผลตารางข้อมูลครับ

คือตอนนี้ผมทำหลายหน้ามาก เลยไม่รู้ว่าส่วนมีปัญหาเป็นโค้ดคิวรี่ส่วนไหน เลยหยิบมาไม่ค่อยถูกนัก (จะเอาอันที่เข้าข่ายตัวแดงๆมาให้ดูละกันครับ )

Code (PHP)
<?
mysql_connect("localhost","root","1234") or die ("ติดต่อ Host ไม่ได้");
mysql_select_db("repair") or die ("ติดต่อฐานข้อมูลไม่ได้");
mysql_query("SET NAMES utf8");
?>
...
...
...
<?
$adate = date('Y-m-d');
$date2 = date("Y-m-d",strtotime("-2 days",strtotime($adate)));
echo $id;
$current_page = 1;
if(isset($_GET['page'])){
	$current_page = $_GET['page'];
}
$row_per_page = 15;

$start_row = ($current_page - 1) * $row_per_page;
	/*$sql = "select SQL_CALC_FOUND_ROWS * FROM repair_od 
	inner join equipment on eq_id = re_items
	inner join eq_problem on p_id = re_detail1
	WHERE status = 'active' ORDER BY re_id  DESC LIMIT $start_row, $row_per_page";*/
	$sql = "select SQL_CALC_FOUND_ROWS * FROM repair_od  inner join example.store on store.storecode = s_code INNER JOIN equipment ON eq_id = re_items WHERE repair_od.re_status = 'active' ORDER BY re_id  DESC LIMIT $start_row, $row_per_page";
	$result = mysql_query($sql) or die (mysql_error());

?>
<div class="container">
<h4>รายการแจ้งซ่อมทั้งหมด</h4>
<br />
<table  class="table table-striped">
<tr>
<th width="50"> <div align="center">#</div></th>
<th > <div align="center">รหัสแจ้งซ่อม</div></th>
<th > <div align="center">รหัสสาขา</div></th>
<th > <div align="center">สาขา</div></th>
<th > <div align="center">วันที่แจ้ง</div></th>
<th > <div align="center">อุปกรณ์ที่แจ้ง</div></th>
<th > <div align="center">จุดที่ชำรุด</div></th>
<th > <div align="center">อาการที่แจ้ง</div></th>
<th colspan="2"><div align="center">ตัวเลือก</div></th>
</tr>
<?
while ($objResult = mysql_fetch_array($result)){
	$url = $_SERVER['PHP_SELF'];
?>
<tr>
<td><div align="center"><?=$objResult["re_id"];?></div></td>
<td align="center"><?=$objResult["re_code"];?></td>
<td align="center"><?=$objResult["s_code"];?></td>
<td align="center"><?=$objResult["s_name"];?></td>
<td><div align="center"><?=$objResult["re_date"];?></div></td>
<td align="center"><?=$objResult["eq_name"];?></td>
<td align="center"><?=$objResult["re_item2"];?></td>
<td align="center"><?=$objResult["re_detail1"];?></td>
<td align="center" ><a href="report.php?id=<?php echo $objResult["re_id"]?>">แจ้งปิด</a></td>
<td align="center" ><a href="edit_repair.php?type=edit&&id=<?php echo $objResult["re_id"]?>">แก้ไข</a></td>

</tr>
<?
}
?>
</table>
<? 
$found_rows = mysql_query("select FOUND_ROWS()");
$total_rows = mysql_result($found_rows, 0, 0);
$total_pages = ceil($total_rows / $row_per_page);

$page_range = 5;
$page_start = $current_page - $page_range;
$page_end = $current_page + $page_range;
?>
<ul class="pagination">
<?
	echo "<li><a href=\"$url?page=1\">หน้าแรก</a></li>";
if($current_page > 1){
	$pg = $current_page - 1;
	echo "<li><a href=\"$url?page=$pg\">ย้อนกลับ</a></li>";
}
	//else  echo "<li><a href=\"$url?page=1\">หน้าแรก</a></li>";

if($current_page > 1){
	$pg = $current_page - 1;
	echo "<li><a href=\"$url?page=$pg\">...</a></li>";
}

if($page_start < 1){
	$page_end += 1 - $page_start; // เช่น 1-(-2) = 3 
	$page_start = 1;
}
if($page_end > $total_pages){
	$diff = $page_end - $total_pages;
	$page_start -= $diff;
	if($page_start < 1 ) {
		$page_start = 1;
	}
	$page_end = $total_pages;
}
for($i = $page_start; $i <= $page_end; $i++) { 
echo "&nbsp;";
if($i == $current_page){
	echo "<li class='active'><a href=\"#\">$i</a></li>";
}
else {
	echo "<li><a href=\"$url?page=$i\">$i</a></li>";
}
	echo "&nbsp;";
}
if($current_page < $total_pages){
	$pg = $current_page + 1;
	echo "<li><a href=\"$url?page=$pg\">...</a></li>";
}
if($current_page < $total_pages){
	$pg = $current_page + 1;
	echo "<li><a href=\"$url?page=$pg\">ถัดไป</a></li>";
}
?>




ประวัติการแก้ไข
2014-10-16 10:28:35
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-16 10:26:54 By : nimirue
 


 

No. 12

Guest


เช็คก่อนว่าฟิว

store.storecode
re_id
eq_id
re_items
repair_od.re_status

มี index แล้วทุกฟิว
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-16 10:38:27 By : เฮ้อ
 


 

No. 13



โพสกระทู้ ( 44 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 12 เขียนโดย : เฮ้อ เมื่อวันที่ 2014-10-16 10:38:27
รายละเอียดของการตอบ ::
มีครบครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-16 10:52:55 By : nimirue
 


 

No. 14

Guest


งั้นอาจจะอยู่ที่ตารางอื่นหรือโค้ดหน้าอื่นครับ

สำหรับโค้ดหน้านี้ไม่น่าจะเป็นปัญหา ถ้าข้อมูลไม่เยอะเป็นแสนๆ row

แต่อย่าลืมนะครับว่า appserv มันก็เก่ามากแล้ว อาจจะเป็นเพราะมันก็ได้
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-16 11:08:55 By : เฮ้อ
 


 

No. 15



โพสกระทู้ ( 44 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 14 เขียนโดย : เฮ้อ เมื่อวันที่ 2014-10-16 11:08:55
รายละเอียดของการตอบ ::
โอเคครับ เดี๋ยวผมจะลองเช็คโค้ดหน้าอื่นๆดูครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-16 11:44:45 By : nimirue
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : Appserv : สอบถามเรื่องผลกระทบการเขียนโค้ดวน loop ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่