解决solr死锁问题

2019-03-27 00:24|来源: 网路

这两天solr总是出现死锁问题,日志大量报错,后来得知删除日志中出现的文件即可解决此问题,故楼主写了一个,解决问题



#!/bin/bash
b=`date +%H:%M`
c=`date +%H:%M -d "-10 min"`
e=`date +%Y-%m-%d`
d=`echo ${c[@]:0:4}`
a=`ssh 192.168.0.140 "cat /www/backserver/logs/job-all.log|grep $e|grep $d|grep  "write.lock$"|awk -F "SimpleFSLock@" '{print "'$2'"}'|awk '{++a["'$0'"]}END{for ( i in a ) print i,a[i]}'|awk '{print $1}'"`
for i in $a
do
ssh 192.168.0.12 "mv $i /tmp/solrerror"
ssh 192.168.0.41 "mv $i /tmp/solrerror"
echo ok
#/usr/local/resin/bin/resin.sh restart -server solr
sh /www/shell/syslog.sh `hostname`-solr-error-移走$i `hostname` 1 2 1
done
echo $a

本文出自 “expect批量同步数据” 博客,请务必保留此出处http://4249964.blog.51cto.com/4239964/1232045


转自:http://4249964.blog.51cto.com/4239964/1232045

相关问答

更多
  • JAVA中几种常见死锁及对策: 解决死锁没有简单的方法,这是因为线程产生死锁都各有各的原因,而且往往具有很高的负载。大多数软件测试产生不了足够多的负载,所以不可能暴露所有的线程错误。在这里中,下面将讨论开发过程常见的4类典型的死锁和解决对策。 (1)数据库死锁 在数据库中,如果一个连接占用了另一个连接所需的数据库锁,则它可以阻塞另一个连接。如果两个或两个以上的连接相互阻塞,则它们都不能继续执行,这种情况称为数据库死锁。 数据库死锁问题不易处理,通常数据行进行更新时,需要锁定该数据行,执行更新,然后在提交或回 ...
  • 可直接在mysql命令行执行:show engine innodb status\G; 查看造成死锁的sql语句,分析索引情况,然后优化sql然后show processlist; 另外可以打开慢查询日志,linux下打开需在my.cnf的[mysqld]里面加上以下内容:
  • 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件。
  • 察看死锁 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id = lo.object_id and lo.session_id = sess.sid order by ao.object_name ; 清除死锁 al ...
  • 1,互斥条件 2,请求和保持条件 3,不剥夺条件 4,环路等待条件 你把其中一个条件解除了就能解决死锁这道面试题 我上次去公司我就是这样回答了 过了~
  • 解决死锁没有简单的方法,这是因为线程产生死锁都各有各的原因,而且往往具有很高的负载。大多数软件测试产生不了足够多的负载,所以不可能暴露所有的线程错误。在这里中,笔者将讨论开发过程常见的4类典型的死锁和解决对策。   (1)数据库死锁   在数据库中,如果一个连接占用了另一个连接所需的数据库锁,则它可以阻塞另一个连接。如果两个或两个以上的连接相互阻塞,则它们都不能继续执行,这种情况称为数据库死锁。   数据库死锁问题不易处理,通常数据行进行更新时,需要锁定该数据行,执行更新,然后在提交或回滚封闭事务时释放锁。 ...
  • 问题是您将局部变量的地址传递给线程。 并且当线程启动并且您正在取消引用用于保存局部变量但现在保留其他内容的地址位置时,此局部变量可能不再存在。 由于它位于程序的堆栈空间中,因此您不会遇到段错误。 以下是代码问题领域及其产生方式的重点: void resolve_deadlock() { void *pthread_exit_state; int id_a = THREAD_A; int id_b = THREAD_B;
  • 我用过: CloudSolrServer solrServer; ... solrServer.getZkStateReader().getClusterState(); ... I used that: CloudSolrServer solrServer; ... solrServer.getZkStateReader().getClusterState(); ...
  • 没有饥饿的解决方案意味着系统是“公平的”; 每个线程都可以访问共享的有限资源以获得进展。 在这种情况下,我会假设没有死锁。 死锁是挨饿线索的终点......他们都饿死了,没有人取得进步。 没有死锁的解决方案仍然可能只有一部分线程对共享的有限资源进行“公平”访问。 其余的线程会饿死。 A solution without starvation would mean the system is "fair"; each thread has just enough access to a shared, lim ...
  • 您正在锁定实例本身并要求锁定两个实例以传输内容。 这是死锁的秘诀。 线程1锁定acc1以开始传输 线程2锁定acc2以开始传输 线程1等待acc2上的锁定被释放,以便它可以完成其传输 线程2等待acc1上的锁定被释放,以便它可以完成其传输 他们每个人都会等待对方无限期地放开他们的锁。 如果必须同时获取多个锁,请始终以相同的顺序获取锁。 也就是说,通过改变您的对象职责,尽量不要一次需要多个锁。 例如,提款和存款是两个不相关的单独操作,但它们会修改余额。 您正试图用锁来保护平衡 。 一旦帐户的余额发生变化,就不 ...