linux の 硬盘扩容相关问题

问题描述:

今天同事求助,说 Linux 服务器硬盘扩容完了,但是 df -h 看的时候还是没扩容的样子。扩容的空间没生效。
我也是丈二和尚摸不着头脑。
怎么肥四骚年?
你们干了个啥?

远控直接安排,过去 lsblk 一看,硬盘 2T 空间,已经挂载到 /data 路径里了。然后 df -h 一看,卧槽,什么情况?909G。
赶紧祭出 bing、百度一条龙。然后看到了如下 blog:

https://blog.csdn.net/qq_41980405/article/details/128199507

简而言之就是:

df -h	# 看挂载盘的filesystem。例如我这边data的是/dev/vdb
resize2fs /dev/vdb	# 那么直接执行这个命令就OK,不一会儿就更新完硬盘空间了。
df -h	# 再执行data的空间就变成2T了

扩展阅读:

resize2fs

    调整ext2、3、4文件系统的大小,它可以放大或者缩小没有挂载的文件系统的大小。如果文件系统已经挂载,它可以扩大文件系统的大小,前提是内核支持在线调整大小。

    size参数指定所请求的文件系统的新大小。如果没有指定任何单元,那么size参数的单位应该是文件系统的文件系统块大小。size参数可以由下列单位编号之一后缀:“s”、“K”、“M”或“G”,分别用于512字节扇区、千字节、兆字节或千兆字节。文件系统的大小可能永远不会大于分区的大小。如果未指定Size参数,则它将默认为分区的大小。

    resize2fs程序不操作分区的大小。如果希望扩大文件系统,必须首先确保可以扩展基础分区的大小。如果您使用逻辑卷管理器LVM(8),可以使用fdisk(8)删除分区并以更大的大小重新创建它,或者使用lvexport(8)。在重新创建分区时,请确保使用与以前相同的启动磁盘圆柱来创建分区!否则,调整大小操作肯定无法工作,您可能会丢失整个文件系统。运行fdisk(8)后,运行resize2fs来调整ext 2文件系统的大小,以使用新扩大的分区中的所有空间。

    如果希望缩小ext2分区,请首先使用resize2fs缩小文件系统的大小。然后可以使用fdisk(8)缩小分区的大小。缩小分区大小时,请确保不使其小于ext2文件系统的新大小。

    此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

转载自:

https://blog.csdn.net/wj78080458/article/details/83851147

linux の tomcat8 异常 Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

问题描述:

近期接到一个项目,客户反馈无缘无故访问不到系统。经排查发现 tomcat 挂掉了,导致客户访问不到。但是排查 kill 日志发现没开相关记录。没办法,先做个定时任务重启看看吧。

解决方案:

1. 写重启脚本
#!/bin/sh

# func:自动监控tomcat脚本并且执行重启操作

# 获取tomcat进程ID(其中[grep -w '.....']中的.....需要替换为实际部署的tomcat文件夹名,如下)
TomcatID=$(ps -ef |grep tomcat |grep -w '/home/apache-tomcat-8.5.100'|grep -v 'grep'|awk '{print $2}')
# 获取同一个tomcat重复启动个数
TomcatCount=$( ps -ef |grep tomcat |grep -w '/home/apache-tomcat-8.5.100'|grep -v 'grep'|awk '{print $2}' |wc -l)

# tomcat启动程序(这里注意tomcat实际安装的路径)
StartTomcat=/home/apache-tomcat-8.5.100/bin/startup.sh
# TomcatCache=/opt/tomcat/work

#定义要监控的页面地址
WebUrl=http://172.17.56.51:8080/DreamWeb

#日志输出
GetPageInfo=/home/tomcat_oip_back_visit.info
TomcatMonitorLog=/home/tomcat_oip_back_monitor.log

Monitor()
{
    echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"
    if [[ $TomcatCount -gt 1 ]];then #这里判断Tomcat进程是否有重复启动,有重复启动则全部干掉
      ps -ef |grep tomcat |grep -w '/home/apache-tomcat-8.5.100'|grep -v 'grep'|awk '{print $2}' | xargs kill -9
      echo "同一tomcat开启开启 $TomcatCount 个进程,统统kill掉"
      sleep 5
    else
        if [ "$TomcatID" ];then #这里判断Tomcat进程是否存在
                echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."
                # 检测是否启动成功(成功的话页面会返回状态"200"),100秒无响应就不等待了
                TomcatServiceCode=$(curl -s -o $GetPageInfo -m 100 --connect-timeout 100 $WebUrl -w %{http_code})
                if [ $TomcatServiceCode -eq 200 ];then
                        echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常"
                else
                        echo "[error]tomcat页面出错,请注意...状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
                        echo "[error]页面访问出错,开始重启tomcat"
                        kill -9 $TomcatID # 杀掉原tomcat进程
                        # sleep 5
                        # rm -rf $TomcatCache # 清理tomcat缓存
                        $StartTomcat
                fi
        else
                echo "[error]tomcat进程不存在!tomcat开始自动重启..."
                echo "[info]$StartTomcat,请稍候..."
                # rm -rf $TomcatCache
                $StartTomcat
        fi
     fi
    echo "--------------------------"
}
Monitor>>$TomcatMonitorLog

2. 将上述脚本存至 retomcat.sh 内。

# 注:Windows 编辑完放到 Linux 内无法运行,可能会报各种异常。必须复制完,在 Linux 里通过 touch 创建 retomcat.sh 并直接 vi retomcat.sh 进入文件内,粘贴完直接改对应参数才可以正常执行。

3. 进入 retomcat.sh 所在路径,执行如下命令:
chmod u+x retomcat.sh

4. 直接执行 retomcat.sh,看看是否可正常重启 tomcat。
./retomcat
5. 如果正常能重启,那么进入 crontab,创建 crontab 任务。某些 Linux 可能 crontab 执行日志没做记录,按如下调试:

sudo vim /etc/rsyslog.d/50-default.conf
cron.*  /var/log/cron.log #将cron前面的注释符去掉
#重启rsyslog
sudo /etc/init.d/rsyslog restart
sudo service rsyslog restart   #重启rsyslog
sudo service crond restart   #重启crond。 在有的系统中,定时任务程序名称是crond

# crontab -e 进入crontab编辑器
crontab -e
i
# 设置每天凌晨2点执行一次
0 2 * * * cd /home;./retomcat.sh

6. 就在这时候,问题来了,看 retomcat.sh 脚本执行日志发现报了,Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 异常。

#  解决方式就是在setclasspath.sh文件内加入如下内容:(Windows是setclasspath.bat,linux是setclasspath.sh)
# -----------------------------------------------------------------------------
#  Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
#  are valid and consistent with the selected start-up options and set up the
#  endorsed directory.
# -----------------------------------------------------------------------------
# Linux写法:
export JAVA_HOME=/home/jdk1.8.0_65
# Windows写法:
set JAVA_HOME=/home/jdk1.8.0_65

这样它就完美运行了。

linux の XXX打开文件过多的问题处理思路

问题描述:
今天项目突然蹦了,客户反馈登录不进去。
登录一看如下报错。拉取 tomcat 日志发现也都是在跑某个 pdf 预览接口提示打开文件过多。
avatar

解决办法:
`ulimit -n

# 临时修改,重启失效

ulimit -HSn 65536

# 永久解决

vim /etc/security/limits.conf

# 添加如下的行

  • soft nproc 65536
  • hard nproc 65536
  • soft nofile 65536
  • hard nofile 65536`

sqlのoracle表空间扩容

业务场景:

记录一下,2024 年 7 月 24,发生了一场不大不小的生产事故,导致一个地级市整个城市的某个业务系统停服一上午。也吸取一下深刻的教训。简单来讲,导致该事故最直接的原因就是这个业务系统现场人员为按时巡检导致,该系统数据库表空间满了没人知道,直到客户反馈业务传输有问题了,才开始排查,排查发现录入的信息数据库内无法查找,抽取日志查看发现表空间无法自动扩容。
所以运维工作中,日常巡检的必要性还是毋庸置疑的。

扩容用有 dba 权限的账号,通过 plsql 客户端直接操作的。是使用增加数据文件的方式进行扩容。建议表空间超过 90% 就直接扩容

–查询表空间使用情况
SELECT a.tablespace_name "表空间名", round(total / (1024 * 1024 * 1024), 2) "表空间大小(G)", round(free / (1024 * 1024 * 1024), 2) "表空间剩余大小(G)", round((total - free) / (1024 * 1024 * 1024), 2) "表空间使用大小(G)", round((total - free) / total, 4) * 100 "使用率 %" FROM (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a, (SELECT tablespace_name, SUM(bytes) total FROM dba_data_files GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name

–临时表空间使用率
select c.tablespace_name "临时表空间名", round(c.bytes / 1024 / 1024 / 1024, 2) "临时表空间大小(G)", round((c.bytes - d.bytes_used) / 1024 / 1024 / 1024, 2) "临时表空间剩余大小(G)", round(d.bytes_used / 1024 / 1024 / 1024, 2) "临时表空间使用大小(G)", round(d.bytes_used * 100 / c.bytes, 4) || '%' "使用率 %" from (select tablespace_name, sum(bytes) bytes from dba_temp_files GROUP by tablespace_name) c, (select tablespace_name, sum(bytes_cached) bytes_used from v$temp_extent_pool GROUP by tablespace_name) d where c.tablespace_name = d.tablespace_name;

–查询表空间位置
SELECT TABLESPACE_NAME "表空间名", BYTES/1024/1024 "表空间大小(M)", FILE_NAME "文件路径",FILE_ID "文件ID" FROM DBA_DATA_FILES order by TABLESPACE_NAME,FILE_NAME;

扩容:
–一个表空间最大为 32g,超过 32g 需要增加,例如:

alter tablespace DAS ADD  datafile '/mc_data/oradata/zsk/das01.dbf' SIZE 30G;

扩展阅读:

删除表空间扩容文件:

#alter tablespace 表空间名称 drop datafile 文件id;
alter tablespace UNDOTBS1 drop datafile 6;

删除临时表空间扩容文件:

#alter tablespace 临时表空间名称 drop tempfile 文件id;
alter tablespace UNDOTBS2 drop tempfile 7;

清理表空间:

alter  tablespace  IRFS_TEMP shrink space;

创建各种类型表空间:

-- 创建大小为50mb的永久表空间TEST01,禁止自动扩展数据文件
create tablespace TEST01
logging
datafile'F:\app\oraclezq\oradata\orcl\TEST01.dbf' size 50m
reuse autoextend off;

-- 创建永久表空间TEST02,允许自动扩展数据文件,本地管理方式
create tablespace TEST02
logging
datafile'F:\app\oraclezq\oradata\orcl\TEST02.dbf' size 50m
reuse autoextend on next 10m maxsize 200m
extent management local;

-- 创建永久表空间TEST03,允许自动扩展数据文件,本地管理方式,区分配方式为自动分配
create tablespace TEST03
logging
datafile'F:\app\oraclezq\oradata\orcl\TEST03.dbf' size 50m
reuse autoextend on next 10m maxsize 200m
extent management local autoallocate;

-- 创建永久表空间TEST04,允许自动扩展数据文件,本地管理方式,区分配方式为定制分配
create tablespace TEST04
logging
datafile'F:\app\oraclezq\oradata\orcl\TEST04.dbf' size 50m
reuse autoextend on next 10m maxsize 200m
extent management local uniform size 10m;

-- 创建永久表空间TEST05,允许自动扩展数据文件,本地管理方式,区分配方式为自动分配,段管理方式为自动管理
create tablespace test05
logging
datafile'F:\app\oraclezq\oradata\orcl\TEST05.dbf' size 50m
reuse autoextend on next 10m maxsize 200M
extent management local autoallocate
segment space management auto;

-- 创建永久表空间TEST06,允许自动扩展数据文件,本地管理方式,区分配方式为定制分配,段管理方式为手动管理
create tablespace test06
logging
datafile'F:\app\oraclezq\oradata\orcl\TEST06.dbf' size 50m
reuse autoextend on next 10m maxsize 200M
extent management local uniform size 10m
segment space management manual;

扩容 oracle 表空间的四种方法

示例 1:新增数据文件
ALTER TABLESPACE DSA ADD DATAFILE ‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\DAS01.DBF’ SIZE 102400M;

示例 2:新增数据文件,允许数据文件自动增长
ALTER TABLESPACE DSA ADD DATAFILE ‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\DSA01.DBF’ SIZE 50M AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

示例 3:允许已存在的数据文件自动增长
ALTER DATABASE DATAFILE ‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\DSA01.DBF’ AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

示例 4:手工改变已存在数据文件的大小
ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DSA01.DBF’ RESIZE 100M;

sqlのupdate case when 的玩法

业务场景:

有部分数据需要按条件做判断来update某个表的字段值。这个我是怎么实现的呢?

sql:

UPDATE user 
SET order = CASE
WHEN id = '1' THEN '1' 
WHEN id = '2' THEN '2' 
END;

当然,这个语句还可以扩展一下,例如如下用法:

示例1:
UPDATE graduates 
SET income = CASE
WHEN income = 20000 THEN income * 0.5 
WHEN income = 15000 THEN income + 500 
ELSE income 
END;

示例2:
UPDATE customers
SET age = CASE 
WHEN age < 30 THEN age + 1
ELSE age
END;

示例3:
UPDATE customers
SET 
age = CASE 
    WHEN city = 'New York' THEN age + 1
    ELSE age
END,
country = CASE 
    WHEN city = 'New York' THEN 'USA'
    ELSE country
END;

神通数据库查询某个模式下所有表的大小

业务场景:
有一天正常巡检发现数据库数据量在成倍增长。按道理,我的业务量,数据不可能会这么疯狂的增量。所以想看看到底是啥数据占用了这么多空间。检查发现有张表里写了文件导致的。

下面是具体sql。

SELECT TMP.NSPNAME AS "Sechma", TMP.RELNAME, SUM(TMP.SIZE) / 1024 /1024 AS "Size(M)" FROM (SELECT N.NSPNAME, C.RELNAME,c.RELKIND, S.SIZE FROM V_SEGMENT_INFO S, SYS_CLASS C, SYS_NAMESPACE N WHERE S.RELID = C.OID AND C.RELNAMESPACE = N.OID) TMP WHERE (TMP.NSPNAME='SYSDBA') and TMP.RELKIND ='r' GROUP BY TMP.NSPNAME, TMP.RELNAME;

# 搞定,收工!!!

# 打卡,下班!!!

WIN10&&WIN11组策略无法打开的问题处理

问题描述:
win + R 运行框内 gpedit.msc 调不起来组策略。

解决方案:
1. 随便哪个位置,新建一个 txt 文档,粘贴如下内容。

@echo off

pushd “%~dp0”

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt

for /f %%i in (‘findstr /i . List.txt 2^>nul’) do dism /online /norestart /add-package:“C:\Windows\servicing\Packages%%i”

pause

2. 另存为 XXX.cmd

3. 文件名随便就行。然后以管理员权限运行。

最后跑完内容后,再 win + R 运行框内 gpedit.msc 就可以了。

NGINX搭建负载均衡

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

map $http_upgrade $connection_upgrade {
	default upgrade;
	'' close;
   }
   
#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;

#上传文件最大限制
client_max_body_size 500M;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

types_hash_max_size 2048;
server_names_hash_max_size 2048;
types_hash_bucket_size 1024;

#gzip  on;


upstream websocket {
		ip_hash;
		server ip:port;
		server ip:port;
		
    }
	
    server {
		listen     80;
		server_name www.baidu.com;
		
		
		location / {
			
			#此处是nignx负载路径重写,重定向
			rewrite ^/$ http://$server_name/DW permanent;
			
			add_header X-Content-Type-Options nosniff;
			proxy_set_header X-scheme $scheme;
			
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header Host $http_host;
			proxy_set_header X-Nginx-Proxy true;
			proxy_hide_header X-Powered-By;
			proxy_hide_header Vary;
			proxy_pass http://websocket;
			proxy_http_version 1.1;
			proxy_set_header Origin '';
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection $connection_upgrade;
			proxy_connect_timeout 1800; 
			proxy_read_timeout 900; 
			proxy_send_timeout 900; 
		


			#proxy_set_header   Host             $host; 
			#proxy_set_header   X-Real-IP        $remote_addr; 
			#proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 

		}

	}
	
	server {
		listen     80;
		server_name www.qq.com;
		
		
		location / {
			
			#此处是nignx负载路径重写,重定向
			rewrite ^/$ http://$server_name/DWeb/dw/index.html permanent;
			
			add_header X-Content-Type-Options nosniff;
			proxy_set_header X-scheme $scheme;
			
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header Host $http_host;
			proxy_set_header X-Nginx-Proxy true;
			proxy_hide_header X-Powered-By;
			proxy_hide_header Vary;
			proxy_pass http://websocket;
			proxy_http_version 1.1;
			proxy_set_header Origin '';
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection $connection_upgrade;
			proxy_connect_timeout 1800; 
			proxy_read_timeout 900; 
			proxy_send_timeout 900; 
		


			#proxy_set_header   Host             $host; 
			#proxy_set_header   X-Real-IP        $remote_addr; 
			#proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 

		}
	}	
}


#server {
    #listen       80;
    #server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    #location / {
    #    root   html;
    #    index  index.html index.htm;
    #}

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page   500 502 503 504  /50x.html;
    #location = /50x.html {
    #  root   html;
    #}

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
#}


# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#    listen       8000;
#    listen       somename:8080;
#    server_name  somename  alias  another.alias;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}


# HTTPS server
#
#server {
#    listen       443 ssl;
#    server_name  localhost;

#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;

#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;

#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

东方通(TongWeb)定时自动重启任务

#首先执行 crontab -e 进入定时任务内
#然后将下面的任务复制粘贴进去,wq! 保存退出
#重启 crontab 任务即可

#每天早晨 5:00 停机

00 05 * * * cd /opt/TongWeb7.0/bin;./stopserver.sh

#每天早晨 5:04 启动

04 05 * * * cd /opt/TongWeb7.0/bin;./startservernohup.sh

#每天中午 13:00 停机

00 13 * * * cd /opt/TongWeb7.0/bin;./stopserver.sh

#每天中午 13:04 重启
04 13 * * * cd /opt/TongWeb7.0/bin;./startservernohup.sh

crontab格式说明

太高级了,简直简单的不要不要的!!!!!!!

又搞定了一个大事儿。

You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.