ทำไมฉันถึงได้รับข้อผิดพลาด“ ไม่สามารถจัดสรรหน่วยความจำ” นี้ได้บ่อยครั้ง?


29

ฉันใช้ Ubuntu 12.10 กับ Gnome-Classic ฉันได้รับข้อผิดพลาดนี้บ่อยครั้งและเกือบจะทุกโปรแกรมทั้งเล็กและใหญ่ เมื่อฉันพยายามเปิดพวกเขาพวกเขาจะไม่เริ่มและฉันได้รับข้อความแสดงข้อผิดพลาดCould not launch 'Program' - Failed to fork child process (Cannot allocate memory)แทน นี่ไม่ใช่ปัญหาจนกระทั่งภายในไม่กี่สัปดาห์ที่ผ่านมา

ไม่สามารถจัดสรรหน่วยความจำได้

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

วิธีเดียวที่ฉันรู้เพื่อป้องกันข้อผิดพลาดนี้คือการรีคอมพิวเตอร์

เหตุใดฉันจึงได้รับข้อผิดพลาดนี้และฉันต้องทำอย่างไรเพื่อหยุดมันให้เกิดขึ้น


ฉันใช้ memtest จากเมนู GRUB และรายงานว่าไม่มีข้อผิดพลาดดังนั้นฉันไม่คิดว่านี่เป็นความล้มเหลวของฮาร์ดแวร์

ฉันวิ่งไปsudo apt-get checkและไม่พบข้อผิดพลาด

นี่คือเอาต์พุตบรรทัดคำสั่งที่ร้องขอบางส่วน:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          3945       3753        191          0        181        475
-/+ buffers/cache:       3096        848
Swap:         3813         60       3753

$ swapon -s
Filename                Type        Size    Used    Priority
/dev/sda6                               partition   3905532 61648   -1

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31421
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31421
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

นี่คือผลลัพธ์ของps --sort -rss -eo rss,pid,command | headหลังจากที่ข้อผิดพลาดเริ่มปรากฏขึ้น:

$ ps --sort -rss -eo rss,pid,command | head
  RSS   PID COMMAND
1963400 2953 gnome-panel
155496 4029 banshee /usr/lib/banshee/Banshee.exe --redirect-log --play-enqueued
104944 15765 /opt/google/chrome/chrome --type=renderer --lang=en-US --force-fieldtrials=ForceCompositingMode/disable/GlobalSdch/global_enable_sdch/InfiniteCache/No/OmniboxDisallowInlineHQP/Standard/OmniboxHUPCreateShorterMatch/Standard/OmniboxHUPCullRedirects/Standard/OmniboxSearchSuggestTrialStarted2012Q4/2/OneClickSignIn/Standard/Prerender/PrerenderEnabled/SBInterstitial/V2/SpdyCwnd/cwndMin10/SpeculativePrefetching/Disabled/Test0PercentDefault/group_01/UMA-Dynamic-Binary-Uniformity-Trial/default/UMA-Session-Randomized-Uniformity-Trial-5-Percent/default/UMA-Uniformity-Trial-1-Percent/group_09/UMA-Uniformity-Trial-10-Percent/group_08/UMA-Uniformity-Trial-20-Percent/group_03/UMA-Uniformity-Trial-5-Percent/group_06/UMA-Uniformity-Trial-50-Percent/group_01/WarmSocketImpact/last_accessed_socket/ --enable-crash-reporter=ECE9000094D279FD3B14B35A74BF72CC,Ubuntu 12.10 --renderer-print-preview --disable-accelerated-2d-canvas --disable-accelerated-video-decode --channel=15654.5.89177240
78164 15654 /opt/google/chrome/chrome       
74912 19890 /usr/bin/python /usr/share/oneconf/oneconf-service
65476 12419 /usr/bin/perl /usr/bin/shutter
61096 19626 /usr/bin/python3.2 /usr/sbin/aptd
57832 15708 /opt/google/chrome/chrome --type=renderer --lang=en-US --force-fieldtrials=ForceCompositingMode/disable/GlobalSdch/global_enable_sdch/InfiniteCache/No/OmniboxDisallowInlineHQP/Standard/OmniboxHUPCreateShorterMatch/Standard/OmniboxHUPCullRedirects/Standard/OmniboxSearchSuggestTrialStarted2012Q4/2/OneClickSignIn/Standard/Prerender/PrerenderEnabled/SBInterstitial/V2/SpdyCwnd/cwndMin10/SpeculativePrefetching/Disabled/Test0PercentDefault/group_01/UMA-Dynamic-Binary-Uniformity-Trial/default/UMA-Session-Randomized-Uniformity-Trial-5-Percent/default/UMA-Uniformity-Trial-1-Percent/group_09/UMA-Uniformity-Trial-10-Percent/group_08/UMA-Uniformity-Trial-20-Percent/group_03/UMA-Uniformity-Trial-5-Percent/group_06/UMA-Uniformity-Trial-50-Percent/group_01/WarmSocketImpact/last_accessed_socket/ --enable-crash-reporter=ECE9000094D279FD3B14B35A74BF72CC,Ubuntu 12.10 --extension-process --renderer-print-preview --disable-accelerated-2d-canvas --disable-accelerated-video-decode --channel=15654.2.1555888673
42108  3030 /var/lib/dropbox/.dropbox-dist/dropbox

จากคำแนะนำในความคิดเห็นและคำตอบดูเหมือนว่าเป็นไปได้ว่าปัญหาเกิดขึ้นกับแผงควบคุม Gnome หรือแอปเพล็ต นี่คือแอพเพล็ตที่ฉันใช้งานอยู่:

แอพเพล็ตพาเนล

applets มีIndicator Applet 12.10.1, System Monitor 3.5.92และ "พื้นที่การแจ้งเตือน" และ "วันที่และเวลา" ทั้งที่ฉันไม่สามารถเข้าถึงหมายเลขเวอร์ชั่นสำหรับ

นี่คือเอาต์พุตบรรทัดคำสั่งที่ร้องขอเพิ่มเติม:

$ df -h
Filesystem                             Size  Used Avail Use% Mounted on
/dev/sda5                               19G   12G  6.4G  64% /
udev                                   2.0G  4.0K  2.0G   1% /dev
tmpfs                                  790M  1.1M  789M   1% /run
none                                   5.0M     0  5.0M   0% /run/lock
none                                   2.0G   84K  2.0G   1% /run/shm
none                                   100M     0  100M   0% /run/user
/dev/sda7                              384G  306G   59G  84% /home
mythbuntu@192.168.0.4:/home/mythbuntu  437G  360G   55G  87% /home/dave/Mythbuntu
$ sudo du -csh /var/log
15M /var/log
15M total

ตกลงฉันได้ต่อท้ายคำตอบของฉันด้วย "ขั้นตอนต่อไป" บางส่วน
Leland Kristie

คุณวิ่งนานแค่ไหนmemtest? ข้อผิดพลาดมักจะปรากฏในการทดสอบในภายหลังเท่านั้น
guntbert

@guntbert: ฉันปล่อยให้memtestทำงานจนกว่าจะมีข้อความที่ด้านล่างของหน้าจอที่กล่าวว่าการทดสอบทั้งหมดเสร็จสมบูรณ์
ถามคำถาม

ตกลงฉันได้ต่อท้ายคำตอบของฉันด้านล่างอีกครั้งด้วยบาง "ขั้นตอนต่อไป"
Leland Kristie

1
@AlistairBuxton: อืม ... หลังจากผ่านไปเจ็ดชั่วโมงด้วยแอปเพล็ตเวลา / วันที่บนแผงกลับดูเหมือนว่าจะไม่มีหน่วยความจำเพิ่มขึ้น อย่างไรก็ตามสิ่งหนึ่งที่แตกต่างคือไม่มีการแสดงสภาพอากาศ ในแอพเพล็ตเวลา / วันที่มีตัวเลือกในการแสดงสภาพอากาศ แต่ถึงแม้ว่าฉันเลือกไว้แล้วจะไม่มีไอคอนสภาพอากาศปรากฏขึ้น สิ่งใดที่ดูเหมือนแปลกและอาจยืนยันว่าปัญหานี้เกี่ยวข้องกับฟังก์ชั่นสภาพอากาศโดยเฉพาะภายในแอพวันที่ / เวลา / สภาพอากาศ
ถามคำถาม

คำตอบ:


33

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

ps --sort -rss -eo rss,pid,command | head

ฉันได้เพิ่มผลลัพธ์ไปยังคำสั่งในคำถามของฉัน ฉันบันทึกผลลัพธ์นี้หลังจากเริ่มรับข้อผิดพลาด
ถามคำถาม

ปัญหาส่วนใหญ่น่าจะเกิดจากตัวบ่งชี้ที่คุณใช้บ่อยเช่นตัวบ่งชี้ทางซ้ายที่ดูเหมือนใบเลื่อยวงเดือนหรือตัวบ่งชี้สภาพอากาศ ลบแต่ละรายการออกเพื่อดูว่าสามารถแก้ไขปัญหาได้หรือไม่
jdthood

ปรากฎว่าเป็นตัวบ่งชี้สภาพอากาศ ดูคำตอบของ OP เอง
jdthood

19

ฉันขอแนะนำให้คุณเริ่มกระบวนการแก้ไขปัญหาด้วยการทดสอบ RAM ด้วยยูทิลิตี้ในตัวที่มีให้ในเมนูการบูต GRUB และกำจัด "bad RAM" เป็นสาเหตุของปัญหา

ทดสอบหน่วยความจำ ทดสอบหน่วยความจำ

memtest86 + memtest86 +

จากนั้นตรวจสอบระบบของคุณสำหรับการพึ่งพาที่ขาดจากเทอร์มินัลด้วยsudo apt-get checkและหากพบข้อผิดพลาดให้รันคำสั่งอีกครั้งเป็นsudo apt-get check -fเพื่อลองและแก้ไขให้ถูกต้อง

หากคุณโปรดลองทำตามขั้นตอนเหล่านี้แล้วรายงานผลการค้นหาที่นี่อีกครั้ง

Leland


สวัสดีเดฟ

ตกลงแล้ว - เราตัดออกฮาร์ดแวร์เป็นแหล่งที่มาของปัญหา

จากนั้นเราจะตรวจสอบการใช้งานหน่วยความจำและการตั้งค่ากระบวนการในคอมพิวเตอร์ของคุณ รันคำสั่งเหล่านี้จากหน้าจอพร้อมรับคำสั่ง:

แสดงจำนวนหน่วยความจำที่ว่างและใช้แล้ว

ฟรี

แสดงสรุปการใช้ swap

อาวุธ

แสดงข้อ จำกัด ทรัพยากรที่ผู้ใช้ดำเนินการ

ulimit -a

ภาพหน้าจอด้านล่างมาจากการติดตั้งที่สะอาด 10.04LTS รายการที่ต้องทราบจากรายการวงกลมสีเหลืองตัวที่หนึ่งและตัวที่สองอยู่ในคอลัมน์ "ใช้แล้ว" ซึ่งแสดงหน่วยความจำและพื้นที่สว็อปที่พร้อมใช้งานสำหรับระบบปฏิบัติการที่ใช้นั่นคือมันไม่ได้ใช้หมดแล้ว

รายการวงกลมสีเหลืองด้านล่างไม่ จำกัด จำนวนของกระบวนการผู้ใช้เช่น gFTP หรือแอปพลิเคชันอื่นเช่นระบบปฏิบัติการจะอนุญาตให้ผู้ใช้เรียกใช้

หากคุณโปรดลองทำตามขั้นตอนเหล่านี้แล้วรายงานผลการค้นหาที่นี่อีกครั้ง

Leland

การใช้งานหน่วยความจำและขีด จำกัด ของทรัพยากรกระบวนการ


สวัสดีเดฟ

ผลลัพธ์ที่ส่งคืนจากps --sort -rss -eo rss, pid, command | ส่วนหัวที่คุณโพสต์แสดงให้เห็นถึงกระบวนการแผงแบบ gnome โดยใช้หน่วยความจำประมาณ 1.8GB ซึ่งดูเหมือนว่าผิดปกติเล็กน้อย - ซึ่งดูเหมือนว่าจะมีหน่วยความจำจำนวนมากสำหรับ Desktop Environment ที่จะใช้งาน

คุณสามารถวิเคราะห์หน่วยความจำได้โดยใช้กระบวนการแผงคำสั่งgnomeโดยการเรียกใช้คำสั่งวนรอบในสกรีนช็อตด้านล่างและดูว่ามันจะไปไหน - มันอาจเผยให้เห็นสิ่งที่โดดเด่น

สำหรับการเปรียบเทียบกระบวนการgnome-panelบนเครื่องเสมือนของฉันใช้ RAM 48MB - แม้ว่าจะเป็นเครื่อง 10.04 ในภาพหน้าจอเหล่านี้เป็นเครื่องเสมือนที่ฉันใช้สำหรับการทดสอบเท่านั้นและไม่ใช่เดสก์ท็อปของฉันเอง

pmap จากกระบวนการ gnome-panel

ระบุว่าฉันจะหยิบยกขั้นตอนต่อไปคือการแยกปัญหา "สิ่ง" ในสภาพแวดล้อมเดสก์ทอป Gnome

ในการทดสอบให้ลองติดตั้งพื้นที่ทำงานพลาสมา KDE ซึ่งคุณจะพบในศูนย์ซอฟต์แวร์ Ubuntu

สภาพแวดล้อมเดสก์ทอป kde-plasma

เมื่อติดตั้งแล้วให้รีบูตคอมพิวเตอร์ของคุณและเข้าสู่ระบบด้วยเซสชัน KDE แทน Gnome ให้เรียกใช้แอปพลิเคชันของคุณอย่างดีที่สุด (เดสก์ท็อปแตกต่างอย่างสิ้นเชิง) เพื่อดูว่าข้อผิดพลาด "ไม่สามารถจัดสรรหน่วยความจำ" ได้หรือไม่

เพื่อให้ชัดเจนคุณจะสามารถเรียกใช้ "การทดสอบ" CLI เดียวกันในสภาพแวดล้อมของ KDE ได้เช่นเดียวกับที่เราทำในสภาพแวดล้อม Gnome และสามารถเปรียบเทียบผลลัพธ์ในการตรวจสอบพฤติกรรมของคอมพิวเตอร์ระหว่างสอง

ใน KDE แอปพลิเคชันคอนโซลที่คุณต้องการคือxtermซึ่งคุณสามารถค้นหาได้จากกล่องโต้ตอบค้นหาในเมนูหลัก

xterm pid และ pmap สำหรับพลาสมาเดสก์ท็อป

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

Leland


ขอบคุณสำหรับการตอบสนอง ฉันรันทั้ง memtest และapt-getคำสั่งที่คุณแนะนำและทั้งสองรายงานว่าไม่มีข้อผิดพลาด ฉันได้ปรับปรุงคำถามของฉันตาม
ถามคำถาม

ฉันได้ต่อท้ายคำถามของฉันผลลัพธ์ของคำสั่งที่คุณร้องขอ สิ่งเดียวที่ฉันทราบคือภายใต้max user processesมันไม่ได้พูดunlimitedตามที่คุณทำ 31421เหมืองแร่มีจำนวน
ถามคำถาม

1
สวัสดีเดฟโน้ตสั้น ๆ ที่แจ้งให้คุณทราบว่าฉันจะสามารถติดตามผลอีกครั้งกับคุณในช่วงสุดสัปดาห์ งานประจำวันของฉันทำให้ฉันยุ่งในตอนเย็นและดังนั้นฉันคิดว่าฉันแค่ส่งข้อความให้คุณที่นี่เพื่อแจ้งให้คุณทราบว่าฉันไม่ได้หายไป Leland
Leland Kristie

โอ้และโดยวิธีฉันพยายามเปลี่ยนกระบวนการผู้ใช้สูงสุดตั้งค่าทั้งหมดจนถึง 1024 และไม่สามารถทำซ้ำข้อผิดพลาดด้วยวิธีนี้ ... คิดว่าฉันจะพูดถึงฉันพยายามที่
Leland Kristie

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

3

หลังจากการทดลองเปิดและปิดในสองสามวันที่ผ่านมาฉันมั่นใจในตอนนี้ว่าปัญหาคือหน่วยความจำรั่วในตัวบ่งชี้สภาพอากาศของแอปเพล็ตเวลาและวันที่ เมื่อสภาพอากาศแสดงขึ้นการใช้หน่วยความจำจะเพิ่มขึ้นตามเวลา เมื่อสภาพอากาศไม่แสดงหน่วยความจำจะไม่เพิ่มขึ้น

ฉันเดาว่านี่เป็นข้อผิดพลาดที่มีตัวบ่งชี้สภาพอากาศที่ควรรายงาน แต่การรายงานข้อผิดพลาดบน Launchpad นั้นซับซ้อนเกินกว่าที่ฉันจะทำ


เปิดเทอร์มินัลบนเครื่องของคุณและเรียกใช้ "apport-bug" ซึ่งจะขอข้อมูลและยื่นรายงานข้อผิดพลาดสำหรับคุณ
jdthood

2
@ jdthood: นั่นเป็นทฤษฎีที่ว่ามันควรจะง่ายขนาดไหน ความจริงก็คือหน้าจอแรกของตัวเลือกไม่ได้อธิบายปัญหาของฉันและตัวเลือก "อื่น ๆ " เพียงบอกฉันว่าฉันต้องการชื่อแพคเกจแล้วออกจาก คล้ายกับการนี้
ถามคำถาม

เปิดbugs.launchpad.net/ubuntu/+source/indicator-weatherในเบราว์เซอร์คลิกที่ "รายงานข้อผิดพลาด" และปฏิบัติตามคำแนะนำ เมื่อคุณทราบหมายเลขที่กำหนดให้กับรายงานให้เรียกใช้ "apport-collect <bugnumber>" เพื่ออัปโหลดข้อมูลที่เกี่ยวข้องเกี่ยวกับเครื่องที่ได้รับผลกระทบ
jdthood

1

หากคุณประสบปัญหานี้โดยใช้ Ruby on Rails กับDigital Oceanอาจเป็นเพราะคุณมี RAM น้อยเกินไป ลองเพิ่มหน่วยความจำจาก 512MB เป็น 1GB เพื่อแก้ไขให้ฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.