一、进程和线程
定义:
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
关系:
1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
1.2、进程使用内存问题
1.2.1、内存泄漏:Memory Leak
1.2.2、内存溢出:Memory Overflow
是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免
1.2.3、内存不足:OOM
二、进程管理工具
2.1、进程树 pstree
pstree [OPTION] [PID | USER]
示例:
[19:03:49 root@Centos8 ~]#pstree 1
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─atd
├─auditd───{auditd}
├─automount───4*[{automount}]
├─crond
├─dbus-daemon
├─httpd─┬─httpd
│ ├─httpd───80*[{httpd}]
│ └─2*[httpd───64*[{httpd}]]
├─irqbalance───{irqbalance}
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rngd───{rngd}
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───sshd───bash───pstree
├─sssd─┬─sssd_be
│ └─sssd_nss
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───3*[{tuned}]
└─vmtoolsd───{vmtoolsd}
[19:14:25 root@Centos8 ~]#pstree -T
systemd─┬─NetworkManager
├─VGAuthService
├─agetty
├─atd
├─auditd
├─automount
├─crond
├─dbus-daemon
├─httpd───4*[httpd]
├─irqbalance
├─master─┬─pickup
│ └─qmgr
├─polkitd
├─rngd
├─rsyslogd
├─sshd───sshd───sshd───bash───pstree
├─sssd─┬─sssd_be
│ └─sssd_nss
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned
└─vmtoolsd
[19:14:58 root@Centos8 ~]#pstree -pT
systemd(1)─┬─NetworkManager(828)
├─VGAuthService(823)
├─agetty(935)
├─atd(934)
├─auditd(800)
├─automount(923)
├─crond(930)
├─dbus-daemon(826)
├─httpd(844)─┬─httpd(1152)
│ ├─httpd(1153)
│ ├─httpd(1154)
│ └─httpd(1155)
├─irqbalance(829)
├─master(1007)─┬─pickup(1008)
│ └─qmgr(1009)
├─polkitd(830)
├─rngd(822)
├─rsyslogd(893)
├─sshd(846)───sshd(1371)───sshd(1383)───bash(1384)───pstree(1971)
├─sssd(825)─┬─sssd_be(865)
│ └─sssd_nss(906)
├─systemd(1374)───(sd-pam)(1377)
├─systemd-journal(643)
├─systemd-logind(925)
├─systemd-udevd(678)
├─tuned(848)
└─vmtoolsd(824)
[19:15:31 root@Centos8 ~]#pstree -u
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─atd
├─auditd───{auditd}
├─automount───4*[{automount}]
├─crond
├─dbus-daemon(dbus)
├─httpd─┬─httpd(apache)
│ ├─httpd(apache)───80*[{httpd}]
│ └─2*[httpd(apache)───64*[{httpd}]]
├─irqbalance───{irqbalance}
├─master─┬─pickup(postfix)
│ └─qmgr(postfix)
├─polkitd(polkitd)───5*[{polkitd}]
├─rngd───{rngd}
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───sshd───bash───pstree
├─sssd─┬─sssd_be
│ └─sssd_nss
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───3*[{tuned}]
└─vmtoolsd───{vmtoolsd}
2.2、进程信息ps
常用选项