精华内容
下载资源
问答
  • 可以进行批量进程操作

     可以进行批量进程操作

    展开全文
  • 服务器进程运行查看方式

    千次阅读 2019-06-20 21:48:35
    Linux服务器进程查看命令详解 - 云+社区 - 腾讯云 原文地址 https://cloud.tencent.com/developer/article/1071977 原文复制如下: Linux 服务器正常启动后,提供服务时会调用程序,占用进程。这时候我们如何查看...

    Linux服务器的进程查看命令详解 - 云+社区 - 腾讯云
    原文地址
    https://cloud.tencent.com/developer/article/1071977

    原文复制如下:

    Linux 服务器正常启动后,提供服务时会调用程序,占用进程。这时候我们如何查看系统中有哪些进程在被调用呢?我们可以通过以下命令来查看。

    一、ps 命令

    ps 命令是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和它所运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。总之大部分信息都是可以通过执行该命令得到的。ps 命令最常用来监控后台进程的工作情况,因为后台进程是不和屏幕、键盘这些标准输入/输出设备进行通信的,所以如果需要检测后台情况,就需要使用 ps 命令了。它的格式如下所示:格式:ps 〔选项〕其主要选项如下。

    -a:显示系统中所有进程的信息。

    -e:显示所有进程的信息。

    -f:显示进程的所有信息。

    -l:以长格式显示进程信息。

    -r:只显示正在运行的进程。

    -u:显示面向用户的格式(包括用户名、CPU 及内存的使用情况等信息)。

    -x:显示所有非控制终端上的进程信息。

    -p:显示由进程 ID 指定的进程信息。

    -t:显示指定终端上的进程信息。

    要对进程进行监测和控制,首先要了解当前进程的情况,当然也就需要查看当前进程的状态了。通过 ps 命令查看进程,根据所显示的信息可以了解哪个进程正在运行、哪个进程被挂起了、进程已运行了多久、进程正在使用的资源、进程的相对优先级,以及进程的标志号(PID)。所有这些信息对用户都很有用,对于系统管理员来说尤为重要。使用 ps -aux 命令可以获得终端上所有用户的有关进程的所有信息,这个也是我们平时用得最多的命令之一,如下所示:

    [root@localhost ~]# ps -aux | more
    Warning: bad syntax, perhaps a bogus ‘-’? See /usr/share/doc/procps-3.2.7/FAQ
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.0 10348 580 ? Ss Jan23 0:07 init [5]
    root 2 0.0 0.0 0 0 ? S< Jan23 0:01 [migration/0]
    root 3 0.0 0.0 0 0 ? SN Jan23 0:00 [ksoftirqd/0]
    root 4 0.0 0.0 0 0 ? S< Jan23 0:00 [watchdog/0]
    root 5 0.0 0.0 0 0 ? S< Jan23 0:01 [migration/1]
    root 6 0.0 0.0 0 0 ? SN Jan23 0:00 [ksoftirqd/1]
    root 7 0.0 0.0 0 0 ? S< Jan23 0:00 [watchdog/1]
    root 8 0.0 0.0 0 0 ? S< Jan23 0:00 [migration/2]
    root 9 0.0 0.0 0 0 ? SN Jan23 0:00 [ksoftirqd/2]
    root 10 0.0 0.0 0 0 ? S< Jan23 0:00 [watchdog/2]
    root 11 0.0 0.0 0 0 ? S< Jan23 0:00 [migration/3]

    USER:表示启动进程的用户。

    PID:表示进程标志号。

    %CPU:表示运行该进程占用 CPU 的时间与该进程总的运行时间之比。

    %MEM:表示该进程占用内存与总内存之比。

    VSZ:表示占用的虚拟内存大小,以 KB 为单位。

    RSS:为进程占用的物理内存值,以 KB 为单位。

    TTY:表示该进程建立时所对应的终端,“?”表示该进程不占用终端。

    STAT:表示进程的运行状态。包括以下几种代码:D,不可中断的睡眠;R,就绪(在可运行队列中);S,睡眠;T,被跟踪或停止;Z,终止(僵死)的进程,这些进程不存在,但暂时无法消除;W,没有足够的内存分页可分配;<,高优先级的进程;N,低优先级的进程;L,有内存分页分配并锁在内存体内(实时系统或 I/O)。

    START:为进程开始时间。

    TIME:为执行的时间。

    COMMAND:是对应的命令名。

    由于 ps 执行后结果太多了,所以我们一般会带上 grep 参数来精确定位我们需要的进程号。例如,我们要查看 Nginx 占用的进程,可以用命令 ps -axugrep nginx,如下所示:

    〔root@localhost ~〕# ps -axu| grep -v grep| grep nginx
    Warning: bad syntax, perhaps a bogus ‘-’? See /usr/share/doc/procps-3.2.7/FAQ
    root 4342 0.0 0.0 41096  896 ?Ss  Mar16  0:00 nginx: master process /usr/local/webserver/nginx/sbin/nginx
    www  4343 0.0 0.6 65920 26232 ?SMar16  0:05 nginx: worker process
    www  4344 0.0 0.6 65920 26160 ?SMar16  0:02 nginx: worker process
    www  4345 0.0 0.6 66076 26460 ?SMar16  0:03 nginx: worker process
    www  4346 0.0 0.6 65920 26104 ?SMar16  0:03 nginx: worker process
    www  4347 0.0 0.6 66052 26228 ?SMar16  0:04 nginx: worker process
    www  4348 0.0 0.6 66012 26372 ?SMar16  0:04 nginx: worker process
    www  4349 0.0 0.6 65788 26076 ?SMar16  0:03 nginx: worker process
    www  4350 0.0 0.6 65920 26188 ?SMar16  0:06 nginx: worker process
    二、top 命令

    top 命令可动态显示服务器的进程信息。top 命令和 ps 命令的基本作用是相同的,都显示系统当前进程的状况。但 top 是一个动态显示过程,即用户可以通过按键来不断刷新当前状态。此命令的使用举例如下所示:

    top - 11:22:52 up 90 days, 1:18, 1 user, load average: 1.06, 1.18, 1.08
    Tasks: 506 total, 1 running, 504 sleeping, 0 stopped, 1 zombie
    Cpu(s): 0.9%us, 0.2%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.6%si, 0.0%st
    Mem: 8171912k total, 6772308k used, 1399604k free, 387668k buffers
    Swap: 16385256k total, 52964k used, 16332292k free, 2112540k cached
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    17700 root 19 0 3205m 2.0g 16m S 9.3 25.9 1362:18 java
    3772 root 20 0 3878m 1.1g 9128 S 5.6 14.1 62:24.67 java
    15019 root 15 0 13004 1424 804 R 0.7 0.0 0:00.58 top
    4499 root 15 0 0 0 0 S 0.3 0.0 10:25.90 nfsd
    4503 root 15 0 0 0 0 S 0.3 0.0 10:15.94 nfsd
    14018 daemon 15 0 5156 1948 1052 S 0.3 0.0 0:00.06 httpd
    1 root 15 0 10348 580 548 S 0.0 0.0 0:07.59 init
    2 root RT -5 0 0 0 S 0.0 0.0 0:01.25 migration/0
    3 root 34 19 0 0 0 S 0.0 0.0 0:00.32 ksoftirqd/0
    4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
    5 root RT -5 0 0 0 S 0.0 0.0 0:01.26 migration/1
    6 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
    7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
    8 root RT -5 0 0 0 S 0.0 0.0 0:00.25 migration/2
    9 root 34 19 0 0 0 S 0.0 0.0 0:00.32 ksoftirqd/2
    10 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/2
    11 root RT -5 0 0 0 S 0.0 0.0 0:00.23 migration/3
    12 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/3
    13 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/3
    14 root RT -5 0 0 0 S 0.0 0.0 0:00.20 migration/4
    15 root 34 19 0 0 0 S 0.0 0.0 0:00.25 ksoftirqd/4

    第一行内容依次表示当前时间、系统启动的时间、当前系统登录的用户数、平均负载。第二行依次显示的是所有启动的、目前运行的、挂起(Sleeping)的和无用(Zombie)的进程。第三行显示的是目前 CPU 的使用情况,包括系统占用的比例、用户使用比例、闲置(Idle)比例。第四行显示物理内存的使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。第五行显示交换分区的使用情况,包括总的交换分区、使用的、空闲的和用于高速缓存的交换分区。第六行显示的内容最多,下面分别进行详细解释。

    PID(Process ID):进程标志号,是非零正整数。
    USER:进程所有者的用户名。
    PR:进程的优先级别。
    NI:进程的优先级别数值。
    VIRT:进程占用的虚拟内存值。
    RES:进程占用的物理内存值。
    SHR:进程使用的共享内存值。
    STAT:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
    %CPU:该进程占用的CPU使用率。

    %MEM:该进程占用的物理内存和总内存的百分比。

    TIME:该进程启动后占用的总CPU时间。
    COMMAND:进程启动的启动命令名称,如果这一行显示不下,在进程中会有一个完整的命令行。
    在 top 命令使用过程中,还可以使用一些交互的命令来完成其他参数的功能。这些命令是通过快捷键启动的,格式如下所示:<空格>:立刻刷新其主要参数如下所示。

    P:根据CPU使用的多少进行排序。
    T:根据时间、累计时间排序。
    q:退出top命令。
    m:切换显示内存信息。
    t:切换显示进程和CPU状态信息。
    c:切换显示命令名称和完整命令行。
    M:根据使用内存的大小进行排序。
    W:将当前设置写入~/.toprc文件中,这是写top配置文件的推荐方法。
    三、pgrep 命令

    pgrep 命令的作用是查找当前运行的进程,并列出匹配给定条件进程的 PID。所有的条件都必须匹配才会被列出。使用权限为所有用户。

    以下是我在一台 64 位 FreeBSD8.1 x86_64 的机器上以用户名 andrewyu 查看的 ngnix 的所有进程号。

    [root@loalhost ~]#pgrep nginx
    2834
    2833
    2832
    2831
    2830
    2828
    2827
    2826
    2825
    四、kill 命令

    kill 命令的作用是终止一个进程。其格式如下:

    kill 〔-s signal |-p〕 〔-a〕pid…
    kill -l 〔 signal 〕
    它的主要选项如下所示。

    -s:指定发送的信号。

    -p:模拟发送信号。

    -l:指定信号的名称列表。

    pid:要终止的进程的 ID 号。

    signal:表示信号。

    kill 可将指定的信息送至程序中。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,则可以使用 SIGKILL(9)信息尝试强制删除程序。kill 命令的工作原理是,向 Linux 系统的内核发送一个系统操作信号和某个程序的进程标志号,然后系统内核就可以对进程标志号指定的进程进行操作了。当需要中断一个前台进程的时候,通常使用 Ctrl+C 组合键;但是对于一个后台进程来说,就不是一个组合键所能解决的了,这时就必须使用 kill 命令。另外,kill -9 可以强制杀掉进程,尤其适用于僵尸进程。

    五、killall 命令

    killall 命令的作用是通过程序的名字,直接杀死所有进程,这里简单介绍一下。如果要杀掉 nginx 的所有进程,要是用 kill 的话就要执行 9 次,但如果用 killall nginx 则能很轻松地一次性解决问题。另外,大家有兴趣也可以了解一下 pkill 的用法,在服务器里用它来“踢人”还是很方便的,这个命令在工作中我们用得不多,大家稍微了解一下即可。

    在 Linux 下,最强大的进程管理命令莫过于 ps 和 top 了,我们应该掌握它们的详细语法,在工作中灵活地使用它们。

    注:以上内容整理自《构建高可用的 Linux 服务器》一书。

    展开全文
  • Oracle服务器进程

    千次阅读 2018-04-13 19:00:13
    Oracle中的各个进程要完成某个特定的...专用/共享服务器,就是服务器进程B 后台进程 background process随数据库而启动,完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程等。C 从属进程 s...

    Oracle中的各个进程要完成某个特定的任务或一组任务,每个进程都会分配内部内存(PGA内存)来完成它的任务。

    Oracle实例主要有3类进程:

    A 服务器进程 server process
    根据客户的请求来完成工作。专用/共享服务器,就是服务器进程

    B 后台进程 background process
    随数据库而启动,完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程等。

    C 从属进程 slave process

    类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外的工作。


    A服务器进程

    代表客户会话完成工作的进程。应用向数据库发送的SQL语句最后就要由这些进程接收并执行。

    dedicated server连接
    会在服务器上得到针对这个连接的一个专用进程。数据库连接与服务器上的一个进程之间存在一对一的映射。

    shared server
    多个会话可以共享一个服务器进程池,其中的进程由Oracle实例生成和管理。

    你所连接的是一个数据库调度器(dispatcher),而不是特意为连接创建的一个专用服务器进程。


    专用or共享 服务器进程的任务是一样的:要处理你提交的所有SQL。当你向数据库提交一个SELECT * FROM EMP查询时,会有一个Oracle专用/共享服务器进程解析这个查询并把它放在共享池中(或者最好能发现这个查询已经在共享池中)。这个进程要提出查询计划,如果必要,还要执行这个查询计划可能在缓冲区缓存中找到必要的数据,或者将数据从磁盘读入缓冲区缓存中。这些服务器进程是干重活的进程。在很多情况下,你都会发现这些进程占用的系统CPU时间最多,因为正是这些进程来执行排序、汇总、联结等等工作,几乎所有工作都是这些进程做的。

    ------------------------------------------------------------------------专用服务器

    客户应用中链接着Oracle库,这些库提供了与数据库通信所需的API。这些API知道如何向数据库提交查询,并处理返回的游标。它们知道如何把你的请求打包为网络调用,专用服务器则知道如何将这些网络调用解开。这部分软件称为Oracle Net,这是一个网络软件/协议,Oracle利用这个软件来支持客户/服务器处理(即使在一个n层体系结构中也会“潜伏”着客户/服务器程序)。不过,即使从技术上讲没有涉及Oracle Net,Oracle也采用了同样的体系结构。也就是说,即使客户和服务器在同一台机器上,也会采用这种两进程(也称为两任务)体系结构。这个体系结构有两个好处:
    1.远程执行(remote execution):客户应用可能在另一台机器上执行(而不是数据库所在的机器)
    2.地址空间隔离(address space isolation):服务器进程可以读写SGA。如果客户进程和服务器进程物理地链接在一起,客户进程中一个错误的指针就能轻松地破坏SGA中的数据结构。

    可以在同一台机器上运行客户和服务器,就能很清楚地看出这种父/子进程的创建

    scott@ORCL>select a.spid dedicated_server,
      2  b.process clientpid
      3  from v$process a, v$session b
      4  where a.addr = b.paddr
      5  and b.sid = (select sid from v$mystat where rownum=1)
      6  /
    
    DEDICATED_SERVER         CLIENTPID
    ------------------------ ------------------------
    5748                     1408:3388
    

    查询与专用服务器相关联的进程ID(PID),从V$PROCESS得到的SPID是执行该查询时所用进程的操作系统PID



    shared server

    共享服务器连接强制要求必须使用Oracle Net,即使客户和服务器都在同一台机器上也不例外。如果不使用Oracle TNS监听器,就无法使用共享服务器。客户应用会连接到Oracle TNS监听器,并重定向或转交给一个调度器。调度器充当客户应用和共享服务器进程之间的“导管”。


    在此可以看到,客户应用(其中链接了Oracle库)会与一个调度器进程物理连接。调度器只负责从客户应用接收入站请求,并把它们放入SGA中的一个请求队列第一个可用的共享服务器进程从队列中选择请求,并附加相关会话的UGA共享服务器处理这个请求,把得到的输出放在响应队列中调度器一直监视着响应队列来得到结果,并把结果传回给客户应用。就客户而言,它分不清到底是通过专用 or 共享 服务器连接进行连接,看上去二者都一样,只是在数据库级二者的区别才会明显。


    连接与会话

    在一条连接上可以建立0个、一个或多个会话各个会话是单独而且独立的,即使它们共享同一条数据库物理连接也是如此。一个会话中的提交不会影响该连接上的任何其他会话。实际上,一条连接上的各个会话可以使用不同的用户身份

    在Oracle中,连接只是客户进程和数据库实例之间的一条特殊线路,最常见的就是网络连接。这条连接可能连接到一个专用服务器进程,也可能连接到调度器。如前所述,连接上可以有0个或多个会话,这说明可以有连接而无相应的会话。另外,一个会话可以有连接也可以没有连接。使用高级Oracle Net特性(如连接池)时,客户可以删除一条物理连接,而会话依然保留(但是会话会空闲)。客户在这个会话上执行某个操作时,它会重新建立物理连接。

    connection

    客户进程Oracle实例一条物理路径(例如,客户与实例之间的一个网络连接)
    连接可以在网络上建立,或者通过IPC机制建立。通常会在客户进程与一个专用服务器或一个调度器之间建立连接。


    session

    会话是实例中存在的一个逻辑实体。这就是你的会话状态(session state),

    也就是表示特定会话的一组内存中的数据结构。客户进程要在服务器中的会话上执行SQL、提交事务和运行存储过程。多个独立的会话可以与一个连接相关联,这些会话甚至可以独立于连接存在。


    这里使用了AUTOTRACE命令,并发现有两个会话。我们在一条连接上使用一个进程创建了两个会话。以下是其中的第一个会话:

    scott@ORCL>select username, sid, serial#, server, paddr, status
      2  from v$session
      3  where username = USER
      4  /
    
    USERNAME                              SID    SERIAL# SERVER    PADDR                STATUS
    ------------------------------ ---------- ---------- --------- ----------------    --------
    SCOTT                                  67        434 DEDICATED 000007FF634DF010    ACTIVE
    这说明现在有一个会话:这是一个与单一专用服务器连接的会话。以上PADDR列是这个专用服务器进程的地址


    下面,只需打开AUTOTRACE来查看SQL*Plus中所执行语句的统计结果:

    scott@ORCL>set autotrace on statistics
    scott@ORCL>select username, sid, serial#, server, paddr, status
      2  from v$session
      3  where username = USER
      4  /
    
    USERNAME                              SID    SERIAL# SERVER    PADDR                STATUS
    ------------------------------ ---------- ---------- --------- ----------------    --------
    SCOTT                                  63        535 DEDICATED 000007FF634DF010    INACTIVE
    SCOTT                                  67        434 DEDICATED 000007FF634DF010    ACTIVE
    
    
    统计信息
    ----------------------------------------------------------
              0  recursive calls
              0  db block gets
              0  consistent gets
              0  physical reads
              0  redo size
            992  bytes sent via SQL*Net to client
            519  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              2  rows processed
    

    这样一来,我们就有了两个会话,但是这两个会话都使用同一个专用服务器进程,从它们都有同样的PADDR值就能看出这一点。从操作系统也可以得到确认,因为没有创建新的进程,这两个会话只使用了一个进程(一条连接)。需要注意,其中一个会话(原来的会话)是ACTIVE(活动的),它正在运行查询来显示这个信息。那个INACTIVE(不活动的)会话是 AUTOTRACE 会话,它的任务是“监视”我们的实际会话,并报告它做了什么。

    在SQL*Plus 中启用AUTOTRACE时,如果执行DML操作(INSERT、UPDATE、DELETE、SELECT和MERGE),SQL*Plus会完成以下动作:
    (1) 如果还不存在辅助会话,它会使用当前连接创建一个新会话。
    (2) 要求这个新会话查询V$SESSTAT视图来记住实际会话(即运行DML的会话)的初始统计值。
    (3) 在原会话中运行DML操作。

    (4) DML语句执行结束后,SQL*Plus会请求另外那个会话(即“监视”会话)再次查询V$SESSTAT,并生成前面所示的报告,显示出原会话(执行DML的会话)的统计结果之差。

    如果关闭AUTOTRACE,SQL*Plus会终止这个额外的会话,在V$SESSION中将无法看到这个会话。

    SQL*Plus之所以会另外创建一个会话来执行监视,原因:如果使用同一个会话来监视内存使用,那执行监视本身也要使用内存,就会对统计结果造成影响(导致对统计结果的修改)。


    到目前为止,我们已经看到一条连接可以有一个或两个会话。现在,我们想使用SQL*Plus来查看一条没有任何会话的连接。在上例所用的同一个SQL*Plus窗口中,只需键入DISCONNECT

    scott@ORCL>disconnect
    从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options 断
    开
    从技术上讲,这个命令应该叫DESTROY_ALL_SESSIONS更合适,而不是DISCONNECT,因为我们并没有真正物理地断开连接。
    在SQL*Plus中要真正地断开连接,应该执行“exit”命令,必须退出才能完全撤销连接。


    我们已经关闭了所有会话。如果使用另一个用户账户system打开另一个会话,并查询。可以看到,之前账户scott下没有会话,但是仍有一个进程,相应地有一条物理连接(使用前面的ADDR值):

    system@ORCL>select * from v$session where username = 'scott@ORCL';
    未选定行
    
    system@ORCL>select username, program
      2  from v$process
      3  where addr = hextoraw('000007FF634DF010');
    
    USERNAME        PROGRAM
    --------------- ----------------------------------------------------------------
    SYSTEM          ORACLE.EXE (SHAD)
    

    所以,这就有了一条没有相关会话的“连接”。可以使用SQL*Plus的CONNECT命令(这个命令的名字也起得不恰当),在这个现有的进程中创建一个新会话(CONNECT命令叫CREATE_SESSION更合适):

    scott@ORCL>conn scott/123456
    已连接。
    scott@ORCL>select username, sid, serial#, server, paddr, status
      2  from v$session
      3  where username = USER
      4  /
    
    USERNAME                              SID    SERIAL# SERVER    PADDR               STATUS
    ------------------------------ ---------- ---------- --------- ----------------    -------
    SCOTT                                  67        470 DEDICATED 000007FF634DF010    ACTIVE

    可以注意到,PADDR还是一样的,所以我们还是在使用同一条物理连接,但是(可能)有一个不同的SID,也许还会分配同样的SID,这取决于在我们注销时是否有别人登录,以及我们原来的SID是否可用。


    到此为止,这些测试都是用一条专用服务器连接执行的,所以PADDR正是专用服务器进程的进程地址。

    ------------------------------------------------------------------------共享服务器

    共享服务器模式设置 详见 https://blog.csdn.net/A0001AA/article/details/79915439

    下面使用共享服务器登录,并在这个会话中查询:

    sys@ORCL>select username, sid, serial#, server, paddr, status from v$session where username = USER ;
    
    USERNAME                    SID    SERIAL# SERVER    PADDR            STATUS
    -------------------- ---------- ---------- --------- ---------------- --------
    SYS                           9         87 SHARED    000007FF634DDFA0 ACTIVE
    一条连接(从客户到数据库实例的一条物理路径)上可以建立0个、1个或多个会话。我们看到了这样一个用例,其中使用了SQL*Plus的AUTOTRACE工具。还有许多其他的工具也利用了这一点。例如,Oracle Forms就使用一条连接上的多个会话来实现其调度功能。Oracle 的n层代理认证特性可用于提供从浏览器到数据库的端到端用户鉴别,这个特性也大量使用了有多个会话的单连接概念,但是每个会话中可能会使用一个不同的用户账户。随着时间的推移,会话可能会使用多个进程,特别是在共享服务器环境中这种情况更常见。另外,如果使用Oracle Net的连接池,会话可能根本不与任何进程关联;连接空闲一段时间后,客户会将其删除,然后再根据检测活动(是否需要连接)透明地重建连接。


    连接和会话之间有一种多对多的关系。不过,最常见的是专用服务器与单一会话之间的一对一关系.

    ------------------------------------------------------------------------------专用 or 共享服务器

    1. 什么时候使用专用服务器
    客户连接与服务器进程之间存在一种一对一的映射。对于目前所有基于SQL的应用来说,这是应用连接Oracle数据库的最常用的方法。设置专用服务器最简单,而且采用这种方法建立连接也最容易,基本上不需要什么配置。
    因为存在一对一的映射,所以不必担心长时间运行的事务会阻塞其他事务。其他事务只通过其自己的专用进程来处理。因此,在非OLTP环境中,也就是可能有长时间运行事务的情况下,应该只考虑使用这种模式。专用服务器是Oracle的推荐配置,它能很好地扩缩。只要服务器有足够的硬件(CPU和RAM)来应对系统所需的专用服务器进程个数,专用服务器甚至可以用于数千条并发连接。

    某些操作必须在专用服务器模式下执行,如数据库启动和关闭,所以每个数据库中可能同时有专用服务器和共享服务器,也可能只设置一个专用服务器。


    2. 什么时候使用共享服务器

    多个客户对应一个共享服务器。使用共享资源时,不要太长时间独占这个资源要确保事务的持续时间尽量短事务可以频繁地执行,但必须在短时间内执行完(这正是OLTP系统的特点)。如果事务持续时间很长,看上去整个系统都会慢下来,因为共享资源被少数进程独占着。使用共享服务器时,可能还会人工死锁(artificial deadlock)。


    你有5个共享服务器,并建立了100个用户会话。现在,一个时间点上最多可以有5个用户会话是活动的。假设其中一个用户会话更新了某一行,但没有提交。正当这个用户呆坐在那里对是否修改还有些迟疑时,可能又有另外5个用户会话力图锁住这一行。当然,这5个会话会被阻塞,只能耐心地等待这一行可用。现在,原来的用户会话(它持有这一行的锁)试图提交事务,相应地释放行上的锁。这个用户会话发现所有共享服务器都已经被那5个 等待的会话所垄断。这就出现了一个人工死锁的情况:锁的持有者永远也拿不到共享服务器来完成提交,除非某个等待的会话放弃其共享服务器但是,除非等待的 会话所等待的是一个有超时时间的锁,否则它们绝对不会放弃其共享服务器(除非让管理员通过一个专用服务器“杀死”(撤销)等待的会话来摆脱这种 困境)。

    共享服务器只适用于OLTP系统,这种系统 事务短而且频繁。在一个OLTP系统中,事务以毫秒为单位执行,任何事务的执行都会在1秒以内的片刻时间内完成。共享服务器对数据仓库很不适用,因为在数据仓库中,可能会执行耗时1分钟、2分钟、5分钟甚至更长时间的查询。如果你的系统中90%都是OLTP,只有10%“不那么OLTP”,那么可以在同一个实例上适当地混合使用专用服务器和共享服务器。采用这种方式,可以大大减少机器上针对OLTP用户的服务器进程个数,并使得“不那么OLTP”的用户不会独占共享服务器。另外,DBA可以使用内置的资源管理器(Resource Manager)进一步控制资源利用率。

    当然,使用共享服务器还有一个很重要的原因,许多高级连接特性都要求使用共享服务器。如果你想使用Oracle Net连接池 或 数据库之间使用数据库链接集合(database link concentration),必须对这些连接使用共享服务器。

    共享服务器的潜在好处

    1.减少操作系统进程/线程数

    2.刻意地限制并发度

    3.减少系统所需的内存

    展开全文
  • 服务器java进程查看

    千次阅读 2018-07-04 10:38:45
    1.首先根据你访问端口号找到程序的PId...查看进程信息:jstack 23033 |grep -A 10 0x5a24这里5a24为23076的16进制;具体转换方法可以使用程序员计算器或者浏览器开发者模式(F12即可)的console;执行完成后java线程栈...

    1.首先根据你访问端口号找到程序的PId:

    netstat -anp | grep 8888


    这里返回的23033就是Pid;

    2.查看该应用线程占用:top -p 23033 -H



    3.查看进程信息:

    jstack 23033 |grep -A 10 0x5a24

    这里5a24为23076的16进制;具体转换方法可以使用程序员计算器或者浏览器开发者模式(F12即可)的console;


    执行完成后java线程栈信息就可以看到了:



    展开全文
  • linux服务器查看进程数量

    千次阅读 2020-06-10 10:35:36
    Linux系统的进程是由线程组成的,当然Linux进程下的线程数是不固定的,可以是一个进程,也可以是多个进程。 一、使用命令查看Linux进程的线程数  1、使用top命令,具体用法是 top -H  加上这个选项,top的每一...
  • oracle 查询进程,并结束进程

    千次阅读 2019-02-15 09:19:29
    查询进程命令: select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s where l.object_id = o.object_id and l.session_id=s.sid; 结束进程: 第一个参数是sid,第...
  • linux服务器查看进程、线程数量

    万次阅读 2019-10-23 09:07:22
    linux服务器查看进程、线程数量 查看进程总数 ps -ef | wc -l 查看某个服务的进程数 eg:http服务: ps -ef | grep httpd | wc -l 查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u 查看...
  • 网上了一下,这个进程是apache的,但是我是用的tomcat并没有使用apache。难道是因为同一个爸爸生的原因? 所以,我的问题是:1.造成这个问题的原因是什么?2.是否是我的操作出现了错误?3.如何避免这个问题。 万谢...
  • Linux根据服务名称或端口查询进程

    万次阅读 2018-04-14 19:16:42
    通过端口号查询进程号pId ps -aux | grep 端口号 ...通过服务器名称查看进程号pid ps -aux/ef | grep 服务名称 根据进程查看此进程所占用的端口等信息 netstat -nap | grep pid netstat -ntlp | grep pid...
  • 程序中解决Windows服务器进程不存在但端口被占用问题 问题现象: 1、使用命令netstat -ano | findstr 端口查看端口占用进程,会得到端口占用进程的PID号,但通过PID号在任务管理器中不到该进程,且使用命令...
  • Linux服务器进程查看命令详解

    千次阅读 2018-03-18 10:31:16
    转载于https://zhangge.net/3186.html 仅供个人...下方显示各进程的显存使用率情况 。显存占用和GPU占用是两个不一样的东西,显卡是由GPU和显存等组成的,显存和GPU的关系有点类似于内存和CPU的关系。我跑caffe代...
  • 转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 本周开始,新手游进行删档封测阶段,前两天... 实现原理主要是使用linux提供的crontab机制,定时查询服务器进程是否存在,如果宕机则处理我们预设的...
  • 最近做一个socket服务器时,发现如果强行关闭客户终端,server会接收到一些奇怪的信息然后非正常退出。 原因:强行关闭客户终端后,client进程交付给初始进程。等初始进程查询到client后将它杀掉。但是在杀掉之前,...
  • 查看当前进程: SELECT * FROM pg_stat_activity where datname=数据库名 and usename=执行SQL的用户名 order by query_start desc; 结果中的pid,即为进程PID号。 查找到LOCK状态的进程,杀掉当前进程: SELECT...
  • 本文介绍如何获取远程服务器上 Java 进程的运行状态.启动 jstatd 服务在服务器端启动 jstatd 服务后, 远程的机器可以通过 rmi 协议获取服务器上 Java 程序的运行状态.在服务器上创建 jstatd 的授权文件, 假设文件...
  • WMI查看远程服务器进程

    千次阅读 2016-04-02 23:45:11
    1. 环境设置 windowsXp以上系统自带wmi,对于一些比较老的系统需要安装wmi的程序包,可以在微软网站上下载相关程序包和WmiTools这个工具。 2. WMI Tools工具介绍 安装完成后,执行WMI CIM Studio后,会出现让你...
  • linux服务器查询java线程占用的资源

    千次阅读 2018-08-23 13:44:42
    1、使用top命令 ,查询java进程 比如选择86184这个进程 2、用 top -H -p 86184 ,查询该进程下的线程资源   3、使用jstack 86184 &gt; jstack.txt ,输出 该进程下的线程信息, 4、比如,观察到86344这个...
  • 服务器上tomcat进程突然终止问题排查 1)检查是否shell进程终止导致tomcat终止(排除) 由于使用./catalina.sh start启动tomcat,启动后tomcat的父PID为1,因此不会由于shell断开而终止 2)tomcat进程是否被kill...
  • IBM ClearCase 服务器进程学习

    千次阅读 2006-08-14 15:11:00
    它的大多数的操作涉及到一些服务器主机和在这些主机上的一些进程。这部分介绍 ClearCase 的服务器进程。 对于大多数部分,这些服务不需要显示的被配置,启动,停止和管理。本章节的知识更有效的帮助你理解可能由...
  • 今天在熟悉Linux命令的时候,使用top查看服务器负载的时候,发现了zombie(简单理解成僵尸吧)这个参数 这个参数就代表僵尸进程的含义,什么是僵尸进程呢?(这里盗用一下官方的解释) 一个进程在调用exit命令结束...
  • linux服务器快速寻找和消灭僵尸进程

    千次阅读 2018-04-18 13:54:29
    linux服务器会出现一些僵尸进程,如何快速寻找和消灭这些僵尸进程呢? 首先,我们可以用top命令来查看服务器当前是否有僵尸进程,可以看到zombie僵尸进程数,如果数字大于0,那么意味着系统当前存在有僵尸进程。 #...
  • 最近公司的服务器(阿里云)一直给老板发信息说,服务器在访问恶意下载源。老板一开始没在意,后来一天一条短信,然后让我处理一下。作为一个后端工程师,普通的服务器维护在小公司基本都是自己上手来。废话太多了,...
  • rabbitmq服务器进程突然挂掉问题

    千次阅读 2019-04-01 00:53:49
    2,减少服务器内存负担,可以将服务器不相关的进程迁移到其他服务器, 3,开启swap,不过用交换内存实际也不是很好,可能有负面影响 4,升级rabbitmq 更进一步的分析可以参考这篇...
  • windows服务器下杀死ORACLE进程

    千次阅读 2011-02-20 23:00:00
    一个用户进程偶尔会挂起或占用过多资源而拒绝其它会话。如果 DBA 依然能够访问数据库,她通常可以发出以下查询: select s.username, s.osuser, s.sid, s.serial#, p.spid from v$session s,v$process p where s....
  • Oracle的服务器进程有Oracle实例自动创建,用来处理连接到实例的客户端进程发出的请求,用户必须通过连接到Oracle的服务器进程来获取数据库中的信息。 对于专用服务器模式(建库时默认),客户端进程和Oracle服务器...
  • Linux服务器上的Tomcat进程频繁被杀

    千次阅读 2020-04-16 12:59:21
    Linux服务器上的Tomcat进程频繁被杀一.查看系统日志二.确定问题三.附带情况四.总结 一.查看系统日志 目前服务器上的Tomcat服务经常出现宕机的情况,想通过查看系统日志/var/log/messages来确定问题,但是系统日志没有...
  • 但是,在游戏服务器端开发领域中的很多重要问题,并没有被明确的分辨出其特异性,从而得到专门的对待。我们不管是在业界开源领域,还是内部分享中,很少会有专门针对游戏业务特征进行专门设计的组件、类库或者框架。...
  • 获取linux服务器所有java进程及名称

    千次阅读 2019-12-19 18:42:09
    pidof java|xargs pwdx
  • linux后台进程守护和java进程查询

    千次阅读 2016-06-13 15:40:27
    一般使用 & 来守护进程 例如:java -jar xxx.jar & 这样就会守护该进程直到关闭窗口 还有就是 nohup 命令  例如 nohup java -jar xxx.jar & 同时 nohup 还可以作为输出流 。。 。。。。。。。。。。。。。...
  • 查询进程ID 并用Kill命令杀死它

    千次阅读 2013-11-30 22:42:31
    使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程。这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号。  ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 343,592
精华内容 137,436
关键字:

一般服务器查进程