ฉันจะเพิ่มความเร็วในการโหลดแท็บ Terminal ได้อย่างไร


93

ฉันจะเร่งความเร็วการเริ่มต้นเทอร์มินัลใน Lion ได้อย่างไร

ฉันไม่ได้หมายถึงการเริ่มต้นของแอปพลิเคชัน Terminal แต่เป็นการเปิดหน้าต่างเทอร์มินัลเริ่มต้นเช่นเมื่อฉันเปิดแท็บใหม่

ฉันไม่มีอะไรในไฟล์. bash_profileของฉันและฉันรันrm -rf /private/var/log/asl/*.aslทุก ๆ 4 ชั่วโมง (ซึ่งจะล้างไฟล์เหล่านั้นซึ่งมักจะทำให้เครื่องช้า)

ขณะนี้เมื่อฉันเปิดแท็บใหม่จะใช้เวลา 3-4 วินาทีจนกระทั่งฉันสามารถเรียกใช้บางอย่าง


2
บางทีอาจมีบางอย่างผิดปกติกับระบบของคุณ? ไม่ควรช้าขนาดนั้น บางครั้งมันใช้เวลาหนึ่งหรือสองวินาทีสำหรับฉัน แต่โดยปกติแล้วมันจะเป็นเพียงเสี้ยววินาที และฉันมีความยุติธรรมใน.bash_profile(ตรวจสอบ~/.profileโดยวิธี) นอกจากนี้: โปรดทราบว่าคุณสามารถเริ่มพิมพ์ในขณะที่ bash กำลังโหลดและโดยปกติสิ่งที่คุณพิมพ์จะถูกคัดลอกไปยังพรอมต์คำสั่งเมื่อพร้อม
Abhi Beckert

คุณใช้บัญชีเครือข่ายหรือโฮมไดเร็กตอรี่เครือข่ายหรือไม่? เทอร์มินัลตอบสนองต่อการป้อนข้อมูลของผู้ใช้ในขณะที่กำลังสร้างเทอร์มินัลหรือไม่ มันแสดงเคอร์เซอร์ไม่ว่างที่กำลังหมุนหรือไม่?
Chris Page

1
หากต้องการทราบว่า Terminal ใช้เวลาใดให้เปิดการตรวจสอบกิจกรรมเลือกเทอร์มินัลแล้วคลิกปุ่มแถบเครื่องมือตัวอย่างกระบวนการจากนั้นไปที่เทอร์มินัลทันทีและสร้างหน้าต่าง / แท็บใหม่ ตัวอย่างอาจให้เบาะแสว่าเวลาไปที่ไหน นอกจากนี้ให้ดูรายการกระบวนการในการตรวจสอบกิจกรรม: หาก "ลงชื่อเข้าใช้" หรือ "ทุบตี" (หรือเชลล์ใด ๆ ที่คุณใช้) ปรากฏในรายการในระหว่างการหน่วงเวลานั่นหมายความว่ามีความล่าช้าเกิดขึ้นในหนึ่งในสองโปรแกรมเหล่านี้ สถานีปลายทาง
Chris หน้า

คุณตรวจสอบตัวแปร PATH แล้วหรือยัง? ฉันสังเกตเห็นว่าของฉันนั้นยาวไปอย่างไร้สาระด้วยการทำซ้ำหลายครั้งเนื่องจากความสับสนของ. bashrc ที่เกิดขึ้น ฉันลบสิ่งที่ต้องทำซ้ำออกไป
190290000 รูเบิลชาย

คำตอบ:


93

คำตอบสั้น ๆ :

ปัญหาเกิดจากการค้นหาบันทึกระบบ (อาจ) แพง ASL หากต้องการดูการทำงานนี้ให้เรียกใช้sudo fs_usage | grep 'asl.*login'ในหน้าต่าง Terminal จากนั้นเปิดหน้าต่าง Terminal ใหม่

เพื่อแก้ไขปัญหากำหนดค่า Terminal เพื่อเปิดเปลือกที่ไม่ได้มาตรฐาน:

  1. สร้าง symlink ให้กับเชลล์ที่คุณต้องการ เช่น:sudo ln -s /bin/bash /usr/local/bin/bash
  2. เปิดการตั้งค่าเทอร์มินัลแล้วเลือกแท็บ "ทั่วไป"
  3. เลือก "Shells open with: Command" และป้อน symlink ที่คุณสร้างในขั้นตอนที่ 1 เช่น "/ usr / local / bin / bash"

หมายเหตุ 1: คุณอาจต้องเพิ่มbashและ-bashลงในรายการกระบวนการที่ "การตั้งค่าเทอร์มินัล> โปรไฟล์> เชลล์> ถามก่อนปิด"

หมายเหตุ 2: /usr/local/binสามารถเขียนได้ในโหมดรูตแบบ OS X 10.11 (El Capitan)

วิธีตรวจสอบการแก้ไข:

  • เปิดหน้าต่าง Terminal ใหม่
  • "เข้าสู่ระบบครั้งล่าสุด:" ไม่ควรแสดงที่ด้านบน
  • เปิดตัวตรวจสอบ (Command + I) แล้วเลือกแท็บข้อมูล
  • คำสั่งควรอ่านlogin -pfq username /usr/bin/bashหรือlogin -pfql username ...

สำคัญ: หากคำสั่ง login ไม่ได้รวม-qพารามิเตอร์ไว้แสดงว่าคุณยังไม่ได้แก้ไขปัญหา

คุณยังสามารถใช้sudo fs_usage | grep 'asl.*login'เพื่อตรวจสอบว่า/var/log/aslไม่สามารถเข้าถึงได้เมื่อเปิดหน้าต่างเทอร์มินัลใหม่

รายละเอียด:

มีข้อบกพร่องมากมายที่เล่นอยู่ที่นี่

สาเหตุที่แท้จริงของความช้าคือ/usr/bin/loginโดยค่าเริ่มต้นจะแสดงวันที่ที่เข้าสู่ระบบครั้งล่าสุดของคุณ ที่จะได้รับวันที่เข้าสู่ระบบล่าสุดนี้จะค้นหา ASL (ที่แอปเปิ้ลระบบเข้าสู่ระบบ) /var/log/asl/ฐานข้อมูลที่ ไฟล์บันทึกเหล่านี้อาจมีการแยกส่วนอย่างมากและเป็นไฟล์ที่มีการแตกไฟล์ซึ่งทำให้เกิดความล่าช้าเมื่อเปิดหน้าต่างหรือแท็บใหม่ (ข้อผิดพลาด 1)

วิธีเดียวที่จะปราบปรามการค้นหา ASL สำหรับการเข้าสู่ระบบสุดท้ายคือการผ่านพารามิเตอร์-q ไฟล์ยังจะระงับการแสดงผล "เข้าสู่ระบบครั้งล่าสุด" แต่ไม่ระงับการค้นหา ASL แพง (Bug 2)/usr/bin/login.hushlogin

เทอร์มินัลใช้/usr/bin/loginเพื่อเปิดหน้าต่าง / เชลล์ใหม่แต่ละครั้ง ไม่มีตัวเลือกในการเรียกใช้เชลล์โดยตรงและไม่มีวิธีการควบคุมพารามิเตอร์ที่ส่งโดยตรงไปยัง/usr/bin/login(Bug 3)

เทอร์มินัลจะส่ง-qพารามิเตอร์ไปให้/usr/bin/loginเมื่อมีการกำหนดค่าให้ใช้เชลล์ที่ไม่ได้มาตรฐาน (Bug 4)

-qพารามิเตอร์เป็นสิ่งที่เราต้องหลีกเลี่ยงปัญหาที่เกิดขึ้นจึง symlink /usr/local/bin/bashไป


6
คุณรู้หรือไม่ว่าเหตุใดจึงเพิ่ม -q หากคำสั่งนั้นเป็น symlink ไปยัง / bin / bash แต่ไม่ใช่หากเป็น / bin / bash
Lri

3
@LauriRanta ดูเหมือนว่าจะเป็นข้อบกพร่องใน Terminal 10.7 และ 10.8 เมื่อคำสั่งเริ่มต้นถูกตั้งค่าให้/bin/bashมันทำตัวราวกับว่ามีการเลือกเชลล์ล็อกอินเริ่มต้น คำสั่งอื่นใดนอกจาก/bin/bashจะทำงานอย่างถูกต้องดังนั้นการใช้ / usr / bin / bash เป็นเพียงวิธีแก้ปัญหา ข้อผิดพลาดนี้ไม่ได้อยู่ใน Snow Leopard
Darren

5
@Darren คุณรายงานข้อผิดพลาดที่น่าสงสัยนี้ให้กับ Apple แล้วหรือยัง หากไม่เป็นเช่นนั้นคุณสามารถทำได้ผ่าน: bugreport.apple.com
Graham Miln

3
น่าเสียดายที่ผลลัพธ์นี้ส่งผลกระทบอย่างมากเกี่ยวกับการทุบตีการทำงานทุกครั้งที่คุณปิดเครื่องบน Yosemite ดังนั้นไม่ใช่การแก้ไขที่ดี: (
ซานตาคลอสJørgensen

2
@ ClausJørgensenฉันไม่ได้ประสบปัญหานั้น คุณอาจต้องการตรวจสอบการตั้งค่า "เชลล์" ภายใต้แท็บโปรไฟล์
Darren

20

สิ่งที่ฉันต้องการก็เปลี่ยนจากเปลือกเข้าสู่ระบบจะสั่ง/bin/bash -il ใน iTerm ของการตั้งค่า> รูปแบบ> ทั่วไป> คำสั่ง

ฉันต้องการตัวเลือก-l( ทำ bash ทำราวกับว่ามันถูกเรียกใช้เป็นเชลล์การเข้าสู่ระบบ ) เพิ่มเพื่อตั้งค่าตัวแปรสภาพแวดล้อมจาก~/.bash_profile


ซึ่งจะหยุดการค้นหาการเข้าสู่ระบบของ ASL ตามคำถามที่ยอมรับ
user151019

4
จากโซลูชั่นทั้งหมดอันนี้ใช้ได้กับฉัน 50!
Bhavin Doshi

1
ข้อมูลดีๆรอบตัวในกระทู้นี้! นี่เป็นวิธีการแก้ปัญหาที่ฉันใช้เพราะไม่จำเป็นต้องสร้าง symlink หรืออะไรก็ตาม เวลาเริ่มต้นเชลล์ใหม่ของฉันลดลงจาก ~ 5-10 วินาทีเป็น Instant ในโซลูชันนี้
DustinB

16

.hushlogin

สร้างไฟล์ที่ว่างเปล่าในโฟลเดอร์ที่บ้านของคุณเรียกว่า.hushlogin; สิ่งนี้จะลดเวลาที่ใช้ในการแท็บ Terminal.app ให้ปรากฏ

คุณสามารถสร้าง.hushloginไฟล์ใน Terminal.app โดยใช้คำสั่งต่อไปนี้:

touch ~/.hushlogin

ไฟล์จะมีผลทันที

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ.hushloginไฟล์และกระบวนการเข้าสู่ระบบโดยทั่วไปในคู่มือการเข้าสู่ระบบ

เงียบกระบวนการเข้าสู่ระบบ

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


6
. hushlogin ไม่สามารถแก้ไขปัญหาได้ opensnoopนี้ได้รับการยืนยันโดยใช้ ดูคำตอบของฉันด้านล่าง
Darren

1
@Darrren: เข้าสู่ระบบคนบอกฉัน: -q กองกำลังนี้เข้าสู่ระบบที่เงียบสงบเช่นถ้า. hushlogin เป็นปัจจุบัน ตัวเลือก q คือสิ่งที่คุณพูดป้องกันปัญหา แต่มันก็ทำเช่นเดียวกับ hushlogin
คริสเตียน

8

ตกลงฉันมีข้อสรุปที่คล้ายกันกับดาร์เรนแม้ว่ากลไกการทำโปรไฟล์ที่แตกต่างกันเล็กน้อย (การล็อกอินช้า NB ยังสามารถเกิดขึ้นได้ในโยเซมิตี)

นี่คือวิธีที่จะบอกสิ่งที่ทำงานจริงเมื่อคุณเริ่มหน้าต่างเข้าสู่ระบบใหม่โดยใช้คำสั่ง profiler ตัวอย่าง OS X

ค้นหาคำสั่งที่ลงชื่อเข้าใช้แบบปกติเรียกใช้งาน

$ ps -ef | grep login

คุณจะเห็นสิ่งที่ชอบ login -pfl username /bin/bash -c exec -la bash /bin/bash

สร้างชื่อไฟล์สคริปต์profile_login.shด้วยเนื้อหาต่อไปนี้โดยการเพิ่ม

-c ""

ที่ส่วนท้ายของคำสั่งที่ค้นพบเพื่อขอให้ทุบตีกลับมาทันทีด้วยเนื้อหาเช่นนี้:

login -pfl username /bin/bash -c exec -la bash /bin/bash -c "" &
sudo sample $! -mayDie # sample the above command

ทำให้ปฏิบัติการได้

$ chmod u+x profile_login.sh

และเรียกใช้โดยใช้ sudo ( sampleคำสั่งต้องการมัน)

$ sudo ./profile_login.sh

ตกลงเพื่อไปข้างหน้าและเรียกใช้ เช่นโดยการรันpurgeคำสั่งก่อน ในกล่องของฉันฉันได้กราฟผลลัพธ์ขนาดใหญ่ มองหา "สาขาที่มีหมายเลขมากที่สุด" (โดยทั่วไปอยู่ด้านบน) ฉันเห็นผู้กระทำผิดที่ใหญ่ที่สุดสองคนดังต่อไปนี้:

หนึ่งจากสิ่งที่เรียกว่าpam_startซึ่งดูเหมือนจะเปิดภาพ PAM auth lib

+   ! 1068 pam_start  (in libpam.2.dylib) + 132  [0x7fff97295ab0]
+   !    :   1066 openpam_dynamic  (in libpam.2.dylib) + 120  [0x7fff97293d14]
+   !    :   |   +   !   1042 coresymbolication_load_image(CSCppDyldSharedMemoryPage*, ImageLoader const*, unsigned long long)  (in dyld) + 143  [0x7fff66725411]
+   !    :   |   +   !   :     1042 mach_msg_trap  (in dyld) + 10  [0x7fff6674a472]

และบางครั้งก็มีผู้กระทำความผิดอีกคนตามมา getlastlogxbyname

+   ! 583 getlastlogxbyname  (in libsystem_c.dylib) + 212  [0x7fff92b3ef7a]
+   !       : 566 asl_file_open_read  (in libsystem_asl.dylib) + 143  [0x7fff8c27030d]
+   !       : | 566 __open_nocancel  (in libsystem_kernel.dylib) + 10  [0x7fff97b39012]    +   !       : | 566 __open_nocancel  (in libsystem_kernel.dylib) + 10  [0x7fff97b39012]

โดยพื้นฐานแล้วมีผู้กระทำผิดสองคน หนึ่งคือpam(ระบบการรับรองความถูกต้องบางประเภท) และอีกสิ่งหนึ่งคือasl"ตรวจสอบการเข้าสู่ระบบล่าสุดของคุณ" เห็นได้ชัดว่าเพียงแค่การลบ/private/var/log/asl/*.aslไฟล์ของคุณไม่เพียงพอ การโหลดแพมนั้นมีราคาแพงกว่าในเครื่องของฉันมากกว่า [SSD] อย่าลังเลที่จะเรียกใช้สคริปต์ข้างต้นและดูว่าระบบของคุณเหมือนกันหรือไม่ น่าสนใจซอร์สโค้ดสำหรับการเรียกเมธอดเหล่านี้ดูเหมือนจะพร้อมใช้งานออนไลน์เช่นopenpam_dynamic

ถ้าฉันทำตามคำตอบของ Darren และแทนที่ "shells open with" ไปเป็นอย่างอื่นที่ไม่ใช่ / bin / bash ฉันจะเห็นบรรทัดต่อไปนี้ที่ใช้เพื่อเริ่มแท็บ terminal ใหม่:

 $ ps -ef | grep login
  ... login -pfql packrd /bin/bash -c exec -la bash /usr/bin/bash

ดังนั้นหากตอนนี้ฉันใช้sampleเคล็ดลับเดียวกันกับคำสั่งเข้าสู่ระบบใหม่

login -pfql username /bin/bash -c exec -la bash /usr/bin/bash -c "" &
sudo sample $! -mayDie

กองซ้อนขนาดเล็กกว่าถูกสร้างขึ้นผู้กระทำผิดที่ใหญ่ที่สุดคือ:

+         8 pam_end  (in libpam.2.dylib) + 190  [0x7fff97294ebb]
+             !           6 coresymbolication_unload_image(CSCppDyldSharedMemoryPage*, ImageLoader const*)  (in dyld) + 143  [0x7fff6e0f634f]

ฉันคิดว่าเป็นเพราะพารามิเตอร์การเข้าสู่ระบบ "-q" กำลังถูกใช้งาน เห็นได้ชัดว่าพารามิเตอร์นี้ข้ามทั้งการโหลดโมดูล pam และค้นหาเวลาเข้าสู่ระบบล่าสุด (ผู้กระทำผิดทั้งสอง) ตามเอกสารของloginคำสั่งการสัมผัส~/.hushloginไฟล์ควรทำสิ่งเดียวกัน แต่ดูเหมือนจะไม่ทำงานอีกต่อไป (อย่างน้อยสำหรับฉันที่ใช้ 10.10]

ดังนั้นโดยสรุปการลบ /private/var/log/asl/*.asl นั้นไม่เพียงพอ (ในการทดลองของฉันมันมีสัดส่วนเพียง 1/3 ของการชะลอตัวจริงที่สุดแม้ว่าคุณจะมีไฟล์จำนวนมาก สำหรับเปอร์เซ็นต์ที่มากขึ้นฉันแน่ใจ)

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

UPDATE: ดูเหมือนว่าcoresymbolication_load_imageยังคงสามารถใช้เวลาเป็นจำนวนมากแม้login -pfqlจะมีการเรียกใช้ (สันนิษฐานว่าโมดูลการตรวจสอบ pam บางส่วนหรืออื่น ๆ จะต้อง "โทรออก" ไปยังเซิร์ฟเวอร์เข้าสู่ระบบกลางหรือบางคี่จึงต้องรอการตอบสนองจากบุคคลที่สาม ) ดังนั้นวิธีแก้ปัญหาจริงเท่านั้นที่ฉันพบคือใช้ iTerm2 และเปลี่ยนการตั้งค่า -> โปรไฟล์ -> ทั่วไป -> คำสั่ง/bin/bashแทน


1
นอกเหนือจากการค้นหา ASL ความล่าช้าในการเข้าสู่ระบบมักเกิดจากการอยู่ในเครือข่ายที่มีเซิร์ฟเวอร์ไดเรกทอรีที่ตอบสนองช้าเมื่อถูกถามถึงข้อมูลผู้ใช้ของคุณ หากคุณไม่ได้อยู่ในเครือข่ายที่เปิดใช้งานบริการไดเรกทอรีฉันไม่ทราบว่าจะต้องใช้เวลานานเท่าไรนอกจากความแออัดของระบบทั่วไป (การใช้งาน CPU ความดันหน่วยความจำความแออัดของ I / O)
Chris หน้า

@ChrisPage ใช่อาจมีบริการไดเรกทอรีเครือข่ายบางอย่างหรืออื่น ๆ เคล็ดลับดี
rogerdpack

3

มันคือทั้งหมดที่เกี่ยวกับการตรวจสอบสาเหตุ คุณสามารถเห็นสิ่งที่กำลังทำอยู่ในขณะที่กระบวนการเริ่มต้นโดยการป้อนข้อมูลbash -xซึ่งจะพิมพ์กระบวนการเริ่มต้นเชลล์

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


2

ลดประวัติของคุณเป็นบางอย่างระหว่าง 4 ถึง 10,000 บรรทัดและอาจลองเลิกและทิ้งหน้าต่างที่บันทึกไว้ทั้งหมด ฉันเห็นว่าทั้งคู่สร้างความแตกต่างในเครื่องที่ช้ากว่าโดยเฉพาะที่ไม่มี SSD สำหรับจัดเก็บ


2

ในกรณีของฉันหลังจากทดลองใช้งานบนเครื่องทำงานโดยไม่ประสบความสำเร็จฉันพบว่าผู้ร้ายเป็น Active Directory การแก้ไขคือไปที่Directory Utilityและแก้ไขการตั้งค่าบริการโฆษณา (ดับเบิลคลิกที่ "Active Directory") เพื่อเปิดใช้งาน "สร้างบัญชีมือถือเมื่อเข้าสู่ระบบ":

สกรีนช็อตของแอปพลิเคชัน Directory Utility ที่เปิดการตั้งค่า Active Directory

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

คุณสามารถไปที่ Directory Utility ด้วย Spotlight หรือผ่านส่วน "ตัวเลือกการเข้าสู่ระบบ" ของการตั้งค่าระบบ / ผู้ใช้ & กลุ่ม (เลือกปุ่ม "แก้ไข ... " ถัดจาก "เซิร์ฟเวอร์บัญชีเครือข่าย"):

บานหน้าต่างผู้ใช้ & กลุ่มที่แสดง "ตัวเลือกการเข้าสู่ระบบ" และ "แก้ไข ... "


0

เพิ่งรัน:

sudo creatbyproc.d
sudo newproc.d

ในเทอร์มินัลแยกต่างหากและเปิดการเปิดใหม่เพื่อดูสิ่งที่กำลังดำเนินการในช่วงเวลานั้น

หากไม่มีอะไรชัดเจนลองต่อไปนี้:

sudo dtruss -an Terminal

นี่จะพิมพ์รายละเอียดทั้งหมดของคุณที่เกิดขึ้นในเวลาโหลดแท็บ


0

เปิด/etc/profileและเพิ่มบรรทัดPATH=""เพื่อให้มีลักษณะดังนี้:

if [ -x /usr/libexec/path_helper ]; then
    PATH=""
    eval `/usr/libexec/path_helper -s`
fi

0

ปัญหาสำหรับฉันคือเซิร์ฟเวอร์โดเมนไดเรกทอรีที่ใช้งานไม่ถูกต้อง

การเปลี่ยนจากนั้นทำการรีบูตเครื่อง mac นั้นทำการแก้ไข

ป้อนคำอธิบายรูปภาพที่นี่

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