Linux

您所在的位置:网站首页 linux配置tomcat的环境变量 Linux

Linux

2023-03-01 23:12| 来源: 网络整理| 查看: 265

环境变量配置

在Linux 中,环境变量的设置需要修改 /etc/profile 配置文件,然后 source /etc/profile 使其生效。

vim /etc/profile export JAVA_HOME=/usr/local/jdk-1.8.0 export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin source /etc/profile

Linux 为了方便环境变量的管理,提供了一种更加优雅的方式。即在 /etc/profile.d/ 文件夹下面新建 .sh 文件。

[root@datacenter01 ~]# cd /etc/profile.d/ [root@datacenter01 profile.d]# ll -rw-r--r-- 1 root root 1047 Jun 11 2021 java.sh -rw-r--r-- 1 root root 139 Apr 29 2020 hadoop.sh

/etc/profile.d/ 的原理是,/etc/profile文件中有如下一段脚本:

if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi

在每次启动时,自动加载并执行/etc/profile.d 下的*.sh,让*.sh中配置的变量生效。

/etc/profile.d/*.sh 与/etc/profile相比:

1、都是用来设置环境变量的文件; 2、都是设置登录(login)级别的变量,当用户重新登录 shell 时会触发;所以效果一致; 3、source /etc/profile也都会生效。

/etc/profile.d/ 的唯一好处是,方便管理。这个也是生产环境最常用的方式。

资源限制

在Linux 操作系统中,Linux会对每个用户或者是在整个系统层面限制其最大进程数、打开文件句柄数…

其实在生产环境中部署Linux后通常都会去调整一些系统限制参数来交付使用,当然这个过程往往都是自动完成的。

Linux支持各种类型的限制,常用的有:

内核文件的大小限制 进程数据块的大小限制 Shell进程创建文件大小限制 可加锁内存大小限制 常驻内存集的大小限制 打开文件句柄数限制 分配堆栈的最大大小限制 CPU占用时间限制 用户最大可用的进程数限制 Shell进程所能使用的最大虚拟内存限制

在Linux 限制包括软性限制和硬性限制两种;软性极限值表示超过这个极限值,系统会发出警告,硬性极限值是实际的显示。所以软性极限值无论如何要小于等于硬性极限值。

session 级别资源限制(ulimit)

ulimit是Linux内置的一个性能调优工具,它的目的是用于控制由Shell运行的进程所能使用的系统最大资源。

ulimit用于限制shell启动进程所用的资源,内核文件大小、进程数据块大小、shell进程创建的文件大小、内存锁住大小、最大可用内存大小、最大可用虚拟内存大小、最大文件描述符大小、CPU时间、分配堆栈大小、单个用户的最大线程数量。它支持硬限制和软限制。

上面提到【限制shell】启动进程, 其实这也就表明了它的作用范围,它不是用来限制系统的,仅仅是用来限制当前登录shell的用户所启动的进程的。临时调整参数的话仅对当前shell有效,关闭则失效,同时不影响其他shell; 如果需要永久生效,则请使用用户级别资源限制。

# 1、设置进程可以打开的最大文件描述符数量 # 该设置只是在当前的session中有效 ulimit -n 524288 # 2、查看所有限制,如果不加-H参数则默认显示软限制。 ulimit -a [root@datacenter03 bin]# 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) 512666 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 524288 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) 131072 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited

上面的2个例子只是ulimit的简单使用,其具体参数如下:

-H 设置硬限制, ulimit -Hn 1024 表示硬限制,限制最大文件描述符为1024。硬限制是绝对不能超过这个值。 -S 设置软限制,ulimit -Sn 1024 表示软限制,限制最大文件描述符为1024,软限制不能大于硬限制,在不超过硬限制的前提下,可以超过软限制使用一段时间。超过该时间就自动清除。 -a 显示当前所有的限制信息,默认为软限制。 -c 最大的core文件大小,以blocks为单位。块大小取决于你系统分区使用的块为多大。 -d 进程占用的最大数据段大小,以bytes为单位。 -f 进程可以创建的单个文件为多大,以blocks为单位。ulimit -f 100 限制进程最大可以创建100块大小的文件。 -i 可以被挂起或者阻塞的最大信号数量。 -l 最大可加锁内存大小,以bytes为单位。这个值对普通用户生效,对管理员不起作用。不过有一个知识需要了解,就是为什么要对内存加锁?抛开虚拟地址空间不说,总之进程和数据都会在物理内存中,只要进程和数据当前都是活动的。不过我们也知道,内存管理有换进换出机制,采用最近最少原则,这些数据暂时性的交换到SWAP分区中,也就是虚拟内存中,而在需要的时候在交换进物理内存。内存加锁就是将数据锁定在物理内存中,避免换进换出。这样可以提高效率,对某些应用需要这样设置,比如数据库、或者对安全性要求高的,但大部分不需要。所以这个参数就是设定进程最大可以锁定多少内存。 -m 进程可用的最大内存数量,以bytes为单位。很多系统设置无效。 -n 进程可以打开的最大文件描述符数量,也就是一个进程可以最多打开多少个文件。 -p 管道缓冲区大小,以bytes为单位。 -q 限制程序使用POSIX消息队列的最大值。 -r 限制程序的实时优先级范围,只针对普通用户有效。 -s 线程栈大小,以bytes为单位。 -t 进程最多可以占用CPU多久,以秒为单位。 -u 用户最大可运行的进程数,只针对普通用户有效。 -v 进程最多可用多少虚拟内存,以bytes为单位。 用户级别资源限制

修改 /etc/security/limits.conf 文件,不过推荐在 /etc/security/limits.d/ 下建立一个.conf的文件在这里写。这样便于管理。在limits.conf文件中有书写格式,参照该格式写就可以。这种方式不但可以对用户进行限制还可以对用户组进行限制。

[root@datacenter03 limits.d]# cat /etc/security/limits.d/20-nproc.conf # Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. #* soft nproc 4096 root soft nproc unlimited * soft nofile 524288 * hard nofile 524288 * soft nproc 131072 * hard nproc 131072 说明: 1、 * 代表针对所有用户,noproc 是代表最大进程数,nofile 是代表最大文件打开数。 2、soft 表示软性极限, hard 表示硬性极限。 系统级别资源限制

下面这个命令是查看当前系统可以打开多少文件描述符,以及目前使用了多少。

[root@datacenter03 limits.d]# cat /proc/sys/fs/file-nr 7360 0 13005118 说明:7360: 当前使用了多少; 0: 回收了多少; 13005118: 当前系统总共可以打开多少。 [root@datacenter03 limits.d]# cat /proc/sys/fs/file-max 13005118 说明: 查看系统最大可以打开多少文件描述符,这个值和上面的最后一个值相等。

file-max显然比ulimit -n的值多,这就是它们的区别,file-max表示当前系统可以打开的最大文件数量,它包括所有用户和所有进程,而ulimit -n只是显示当前用户或者说是进程级别可以打开的数量。它们是在不同层次。如果你要修改系统级别的资源限制,就要修改/etc/sysctl.conf文件。

比如fs.file-max=65536 把这个写入到这个文件,那么系统的最大文件描述符数量就是65535了。最后使用sysctl -p使其生效。

# 限制系统当前所有的限制值 sysctl -a [root@datacenter01 ~]# cat /etc/sysctl.conf | grep file fs.file-max=65535

这是一个很有趣的现象,我们发现 lsof 和 file-nr 统计打开的文件句柄数量是不一致的:

# cat /proc/sys/fs/file-max 1106537 # cat /proc/sys/fs/file-nr 1088 0 1106537 # lsof | wc -l 1506

why? 这是因为写到 lsof 是列出系统所占用的资源,但是这些资源不一定会占用打开文件句柄的。如共享内存,信号量,消息队列,内存映射… 虽然占用了这些资源,但不占用打开文件号。

我曾经在前端机上很长时间都无法得到lsof | wc -l 的结果,这个时候可以通过file-nr粗略的估算一下打开的文件句柄数。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3